Swift 只有两个可能值的数组

Swift Array with Only Two Possible Values

我想创建一个数组,假设名为 nums,我希望此数组包含 DoubleError 值,仅此而已。目前,我可以通过实例化 nums 来解决这个问题,如下所示:

var nums = Array<(Double?, Error?)>()

然后我通过并做类似的事情:

nums.append((5.0, nil))
nums.append((nil, Error.invalidNumber))
nums.append((10.0, nil))

这行得通,但它没有像我想要的那样让 nums 有一个 Double 或一个 Error,它有一个包含这些值的元组。如何更改数组的实例化,以便我只需要将其中一个值附加到数组?

我的目标是能够做到这一点:

nums.append(5.0)
nums.append(Error.invalidNumber)
nums.append(10.0)

Result 如果类型适合您的需要。它是一个通用的 enum ,其值可以是 success(Value) (其中 ValueDouble 对于你的情况)或 failure(Error).

var nums = [Result<Double, Error>]()

然后你可以做:

nums.append(.success(5.0))
nums.append(.failure(Error.invalidNumber))
nums.append(.success(10.0))

你想要的不是元组而是枚举:

enum DoubleOrNothing {
    case double(Double)
    case nothing(Error)
}

现在它只能是一个或另一个,"value" 是它所在案例的关联值。只需制作一个该枚举的数组,您就可以自由回家了。

enum MyError : Error {
    case invalidNumber
}

var nums = Array<DoubleOrNothing>()
nums.append(.double(5.0))
nums.append(.nothing(MyError.invalidNumber))
nums.append(.double(10.0))

David 的回答是,如果您的错误都是同一类型,该怎么办。否则,您需要使用 throwing get 访问器。 (A[() throws -> Double].)

var getDoubleArray = [
  { 5.0 },
  { throw Error.invalidNumber },
  { 10 }
]