使用“+=”运算符将一个数组连接到另一个可选值数组
Concatenating an array to another optional values array with the “+=” operator
我有一个对象数组:
var fooArray = [Foo]()
如果我想用 Foo 对象附加另一个数组,我可以使用 +=
:
fooArray += anotherFooArray
这个有效。
但是如果我将数组中的 Foo 对象设为可选:
var fooArray = [Foo?]()
进行串联会引发错误:
[Foo?]() is not identical to 'CGFloat'
我完全不明白这是什么问题以及 CGFloat 类型与此有什么关系?
问题是 Foo
和 Foo?
是两种不同的类型(可选的实际上是 Optional<T>
枚举的一个实例)。
为了追加到数组中,元素必须是同一类型 - Foo
和 Optional<Foo>
不是。
您可以通过简单地将数组附加到可选 Foo
s:
的数组来解决这个问题
fooArray += anotherFooArray as [Foo?]
至于误导性错误消息,我认为它试图应用 +=
运算符的重载,将 CGFloat 作为参数之一,因为它无法将提供的参数与重载相匹配为数组类型定义。
你做错了几件事。 Swift 中的数组声明如下:
var array = []
此外,如果您想让数组中的对象成为可选对象,则您传递的对象也应该是可选的:
class Goal {}
var goal1: Goal?
var goal2: Goal?
var goal3: Goal?
var goal4: Goal?
goal2 = Goal() // Initialized
goal4 = Goal() // Initialized
var array = [goal1?, goal2?, goal3?]
向数组添加新对象是通过附加它来完成的:
array.append(goal4?)
此示例数组具有 [nil, Goal, nil, Goal],因为目标 2 和 4 已初始化,其余为 nil。如果您只想将对象添加到数组中,请使用绑定:
let goal1 = goal1 {
array.append(goal1)
}
希望对您有所帮助!
如果你想获得只包含值而不是 nil
的数组,你可以使用 reduce
函数来创建新数组。
let total: [Foo] = reduce(fooArray, otherArray) { acc, foo in
if let foo = foo {
return acc + [foo]
} else {
return acc
}
}
fooArray
的类型是 [Foo?]
,otherArray
的类型是 [Foo]
我有一个对象数组:
var fooArray = [Foo]()
如果我想用 Foo 对象附加另一个数组,我可以使用 +=
:
fooArray += anotherFooArray
这个有效。
但是如果我将数组中的 Foo 对象设为可选:
var fooArray = [Foo?]()
进行串联会引发错误:
[Foo?]() is not identical to 'CGFloat'
我完全不明白这是什么问题以及 CGFloat 类型与此有什么关系?
问题是 Foo
和 Foo?
是两种不同的类型(可选的实际上是 Optional<T>
枚举的一个实例)。
为了追加到数组中,元素必须是同一类型 - Foo
和 Optional<Foo>
不是。
您可以通过简单地将数组附加到可选 Foo
s:
fooArray += anotherFooArray as [Foo?]
至于误导性错误消息,我认为它试图应用 +=
运算符的重载,将 CGFloat 作为参数之一,因为它无法将提供的参数与重载相匹配为数组类型定义。
你做错了几件事。 Swift 中的数组声明如下:
var array = []
此外,如果您想让数组中的对象成为可选对象,则您传递的对象也应该是可选的:
class Goal {}
var goal1: Goal?
var goal2: Goal?
var goal3: Goal?
var goal4: Goal?
goal2 = Goal() // Initialized
goal4 = Goal() // Initialized
var array = [goal1?, goal2?, goal3?]
向数组添加新对象是通过附加它来完成的:
array.append(goal4?)
此示例数组具有 [nil, Goal, nil, Goal],因为目标 2 和 4 已初始化,其余为 nil。如果您只想将对象添加到数组中,请使用绑定:
let goal1 = goal1 {
array.append(goal1)
}
希望对您有所帮助!
如果你想获得只包含值而不是 nil
的数组,你可以使用 reduce
函数来创建新数组。
let total: [Foo] = reduce(fooArray, otherArray) { acc, foo in
if let foo = foo {
return acc + [foo]
} else {
return acc
}
}
fooArray
的类型是 [Foo?]
,otherArray
的类型是 [Foo]