只有两个可能值的Swift数组

我想创建一个名为nums的数组,并且我希望该数组保留一个Double或一个Error值,而没有其他值。目前,我可以通过实例化nums来解决此问题:

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

然后我经过以下操作:

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

这有效,但是没有像我想要的那样让nums具有DoubleError,而是具有这些值的元组。如何更改数组的实例,以便只需要将值之一附加到数组?

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

nums.append(5.0)
nums.append(Error.invalidNumber)
nums.append(10.0)
nzjnzj 回答:只有两个可能值的Swift数组

Result(如果您需要的类型)。它是通用的enum,其值可以为success(Value)(其中ValueDoublefailure(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)
}

现在,它只能是一个或另一个,而“值”是其大小写的关联值。只需排列一个枚举即可,您就可以自由回家了。

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访问器。 (一个[() throws -> Double]。)

var getDoubleArray = [
  { 5.0 },{ throw Error.invalidNumber },{ 10 }
]
本文链接:https://www.f2er.com/2636969.html

大家都在问