数组不附加自定义类对象
// 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对象?
答案 0 :(得分:1)
Swift错误消息通常非常神秘。我不确定Uint8
到底是什么。
Swift数组只包含一种类型。在这种情况下,您的shoppingList
被推断为[NSObject]
类型,因为Swift能够将"Eggs"
与NSString
和2.0
联系起来NSNumber
}。 NSString
和NSNumber
都是NSObject
的子类,因此Swift会将您的数组推断为[NSObject]
类型。
如果您想将Foo()
放入该数组,那么Foo
也需要是NSObject
的子类:
class Foo: NSObject { ...
答案 1 :(得分:1)
除了@ vacawama的解决方案之外,您可以显式指定数组元素类型,而不是让类型推断为您设置它:
var shoppingList: [AnyObject] = ["Eggs", 2.0]
将值类型设置为AnyObject
的明显优势在于您不必使自定义类继承自NSObject