Arrays 如何在Swift中将可选数组连接到另一个数组?
我知道这听起来很可笑,但我现在很困惑。 基本上我有两个变量,一个是Arrays 如何在Swift中将可选数组连接到另一个数组?,arrays,swift,Arrays,Swift,我知道这听起来很可笑,但我现在很困惑。 基本上我有两个变量,一个是[Data],另一个是数组? 我需要把这两者结合起来。 我试过做var1+var2,这给了我一些错误,比如不能对这两个进行二进制操作。 所以我在谷歌上搜索,我可以使用append方法,现在有更多的问题: append方法在autofill中被划掉了,所以我不确定是否应该使用它 即使我尝试使用它(当它被划掉时),它仍然会给我错误 以下是我得到的代码和错误: var a1:[Data] //a return value from ot
[Data]
,另一个是数组?
我需要把这两者结合起来。
我试过做var1+var2
,这给了我一些错误,比如不能对这两个进行二进制操作。
所以我在谷歌上搜索,我可以使用append方法,现在有更多的问题:
var a1:[Data] //a return value from other function
var a2:Array<Data>? //a parameter that's passed in
a1.append(contentsOf:a2) //Cannot use mutating member on immutable value: function call returns immutable value
a1+a2 //Binary operator '+' cannot be applied to operands of type 'Array<Data>' and 'Array<Data>?'
var a1:[Data]//来自其他函数的返回值
变量a2:数组//传入的参数
a1.append(contentsOf:a2)//不能对不可变值使用mutating成员:函数调用返回不可变值
a1+a2//二进制运算符“+”不能应用于“Array”和“Array”类型的操作数
两个数组都可以为空,如何连接这两个数组?其中一个数组是可选的。您必须以某种方式处理可能的
nil
值
使用零聚结的简单解决方案:
let concatenated = var1 + (var2 ?? [])
或者,稍微复杂一点:
var concatenated = var1
if let var2 = var2 {
concatenated.append(var2)
}
当然,还有其他可能的解决方案。其中一个阵列是可选的。您必须以某种方式处理可能的
nil
值
使用零聚结的简单解决方案:
let concatenated = var1 + (var2 ?? [])
或者,稍微复杂一点:
var concatenated = var1
if let var2 = var2 {
concatenated.append(var2)
}
当然,还有其他可能的解决方案。Sulthan的答案是快速解决方案,但如果您在代码中经常这样做,您可以重载
+
来自动处理它:
extension Array {
static func + (lhs: [Element], rhs: [Element]?) -> [Element] {
return lhs + (rhs ?? [])
}
}
Sulthan的答案是快速解决方案,但如果您在代码中经常这样做,您可以重载
+
来自动处理它:
extension Array {
static func + (lhs: [Element], rhs: [Element]?) -> [Element] {
return lhs + (rhs ?? [])
}
}
您还可以扩展RangeReplacetable集合并实现自定义追加方法以及添加和变异添加运算符,如下所示:
extension RangeReplaceableCollection {
public mutating func append<S: Sequence>(contentsOf sequence: S?) where Element == S.Element {
guard let sequence = sequence else { return }
reserveCapacity(count + sequence.underestimatedCount)
append(contentsOf: sequence)
}
}
您还可以扩展RangeReplacetable集合并实现自定义追加方法以及添加和变异添加运算符,如下所示:
extension RangeReplaceableCollection {
public mutating func append<S: Sequence>(contentsOf sequence: S?) where Element == S.Element {
guard let sequence = sequence else { return }
reserveCapacity(count + sequence.underestimatedCount)
append(contentsOf: sequence)
}
}
如果其中一个是可选的,您可以通过
[Data]
的方式,例如var1+(var2??[])
,而数组
实际上是一样的。?
起作用。@Sulthan谢谢你,就这样,解决了@Sulthan你应该把你的评论作为回答。可选择的思考是答案。不要将答案编辑到问题中。要么等待@Sulthan发布他的评论作为答案,要么自己回答。如果其中一个选项是可选的,您可以顺便问一下[Data]
和数组
实际上是一样的。?
起作用。@Sulthan谢谢你,就这样,解决了@Sulthan你应该把你的评论作为回答。可选择的思考是答案。不要将答案编辑到问题中。要么等待@Sulthan将其评论作为答案发布,要么自己回答。如果可选值位于操作数的左侧,如何?加法应该是交换的。但是,向nil
数组中添加一些内容是否有意义?如果可选项位于操作数的左侧如何?加法应该是交换的。但是,向nil
数组中添加一些内容有意义吗?