为什么下面的 swift 代码会报错?

Why does the following swift code gives error?

数组未附加自定义 class 对象

// Create an array with String and Double
var shoppingList = ["Eggs", 2.0]

// Append array with string object
shoppingList += ["Milk"]

// Declare an example class 
    class Foo  {
        var name : String?
        func Foo() {
            name = "Default Name"
        }
}


var foo : Foo = Foo()
shoppingList += [foo] // Error : '[NSObject]' is not identical to 'Uint8'

为什么 shoppingList 不附加 foo 对象?

Swift 错误消息通常非常隐晦。我不确定 Uint8 是什么意思。

Swift 数组保存单一类型。在这种情况下,您的 shoppingList 已被推断为 [NSObject] 类型,因为 Swift 能够桥接 "Eggs"NSString2.0NSNumberNSStringNSNumber 都是 NSObject 的子类,所以 Swift 推断你的数组是 [NSObject].

类型

如果要将 Foo() 放入该数组,则 Foo 也需要是 NSObject 的子类:

class Foo: NSObject { ...

替代@vacawama 的解决方案,您可以显式指定数组元素类型,而不是让类型推断为您设置它:

var shoppingList: [AnyObject] = ["Eggs", 2.0]

将值类型设置为 AnyObject 的明显优势是您不必使自定义 类 继承自 NSObject