Skip to main content
 首页 » 操作系统

arrays之使用 “+=” 运算符将一个数组连接到另一个可选值数组

2024年01月01日38mate10pro

我有一个对象数组:

var fooArray = [Foo]() 

如果我想用 Foo 对象附加另一个数组,我可以使用 += :

fooArray += anotherFooArray 

这个有效。

但是如果我将数组中的 Foo 对象设为可选:

var fooArray = [Foo?]() 

进行串联会引发错误:

[Foo?]() is not identical to 'CGFloat' 

我绝对不明白这是什么问题,以及 CGFloat 类型与此有什么关系?

请您参考如下方法:

问题是 Foo和 Foo?有 2 种不同的类型(可选的实际上是 Optional<T> 枚举的一个实例)。

为了追加到数组中,元素必须是同一类型 - Foo和 Optional<Foo>不是。

您可以通过简单地将数组转换为附加到可选的数组 Foo 来解决这个问题。小号:

fooArray += anotherFooArray as [Foo?] 

至于误导性的错误消息,我认为它正在尝试应用 += 的重载。运算符将 CGFloat 作为参数之一,因为它无法将提供的参数与为数组类型定义的重载相匹配。