Arrays 只有两个可能值的Swift数组

Arrays 只有两个可能值的Swift数组,arrays,swift,multivalue,Arrays,Swift,Multivalue,我想创建一个数组,比方说名为nums,我想这个数组保存一个Double或Error值,而不保存其他值。目前,我可以通过如下实例化nums来解决这个问题: var nums=Array() 然后我做了一些类似的事情: nums.append((5.0, nil)) nums.append((nil, Error.invalidNumber)) nums.append((10.0, nil)) 这是可行的,但它不是像我想要的那样让nums有一个Double或Error,而是有一个这些值的元组。如何

我想创建一个数组,比方说名为
nums
,我想这个数组保存一个
Double
Error
值,而不保存其他值。目前,我可以通过如下实例化
nums
来解决这个问题:

var nums=Array()

然后我做了一些类似的事情:

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)


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


您需要的不是元组而是枚举:

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))
enum MyError:错误{
病号
}
var nums=Array()
nums.append(.double(5.0))
nums.append(.nothing(MyError.invalidNumber))
nums.append(.double(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))
enum MyError:错误{
病号
}
var nums=Array()
nums.append(.double(5.0))
nums.append(.nothing(MyError.invalidNumber))
nums.append(.double(10.0))

大卫的答案是,如果你的错误都是同一类型的,那该怎么办。否则,您需要使用获取访问器。(A
[()抛出->加倍]

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

大卫的答案是,如果你的错误都是同一类型的,那该怎么办。否则,您需要使用获取访问器。(A
[()抛出->加倍]

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

当然,您还需要学习如何提取关联的值,但这并不困难。我不确定为什么会被否决。我真的希望下层选民能解释他们的理由…@罗布我们有些人有敌人…:)当然,您还需要学习如何提取关联的值,但这并不困难。我不知道为什么会被否决。我真的希望下层选民能解释他们的理由…@罗布我们有些人有敌人…:)这些错误实际上不需要是相同的类型,因为您只需声明
Result
以使其
Failure=Error
,然后就可以传入任何
Error
一致的类型。这是由于一个特殊的情况,
Error
实际上符合自身,因此它支持这样的用例。@DávidPásztor嗯,哦,我想我可能有学习某些东西的危险!:()())很酷,我从来没有想过(关于符合自身的错误)。但这会使
结果
在语言级构造上毫无意义。我们在适当的地方使用闭包,但这不是其中之一。这是低效和复杂的。这是基于一个错误的前提,即Dávid的答案要求错误类型必须相同。它们可以是符合
Error
协议的任何类型。这些错误实际上不需要是相同的类型,因为您可以只声明
Result
以获得其
Failure=Error
,然后传入任何
Error
符合类型。这是由于一个特殊的情况,
Error
实际上符合自身,因此它支持这样的用例。@DávidPásztor嗯,哦,我想我可能有学习某些东西的危险!:()())很酷,我从来没有想过(关于符合自身的错误)。但这会使
结果
在语言级构造上毫无意义。我们在适当的地方使用闭包,但这不是其中之一。这是低效和复杂的。这是基于一个错误的前提,即Dávid的答案要求错误类型必须相同。它们可以是符合
Error
协议的任何类型。