Swift 只有两个可能值的数组
Swift Array with Only Two Possible Values
我想创建一个数组,假设名为 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
有一个 Double
或一个 Error
,它有一个包含这些值的元组。如何更改数组的实例化,以便我只需要将其中一个值附加到数组?
我的目标是能够做到这一点:
nums.append(5.0)
nums.append(Error.invalidNumber)
nums.append(10.0)
Result
如果类型适合您的需要。它是一个通用的 enum
,其值可以是 success(Value)
(其中 Value
是 Double
对于你的情况)或 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 }
]
我想创建一个数组,假设名为 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
有一个 Double
或一个 Error
,它有一个包含这些值的元组。如何更改数组的实例化,以便我只需要将其中一个值附加到数组?
我的目标是能够做到这一点:
nums.append(5.0)
nums.append(Error.invalidNumber)
nums.append(10.0)
Result
如果类型适合您的需要。它是一个通用的 enum
,其值可以是 success(Value)
(其中 Value
是 Double
对于你的情况)或 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 }
]