为什么下面的 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"
到 NSString
和 2.0
到NSNumber
。 NSString
和 NSNumber
都是 NSObject
的子类,所以 Swift 推断你的数组是 [NSObject]
.
类型
如果要将 Foo()
放入该数组,则 Foo
也需要是 NSObject
的子类:
class Foo: NSObject { ...
替代@vacawama 的解决方案,您可以显式指定数组元素类型,而不是让类型推断为您设置它:
var shoppingList: [AnyObject] = ["Eggs", 2.0]
将值类型设置为 AnyObject
的明显优势是您不必使自定义 类 继承自 NSObject
数组未附加自定义 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"
到 NSString
和 2.0
到NSNumber
。 NSString
和 NSNumber
都是 NSObject
的子类,所以 Swift 推断你的数组是 [NSObject]
.
如果要将 Foo()
放入该数组,则 Foo
也需要是 NSObject
的子类:
class Foo: NSObject { ...
替代@vacawama 的解决方案,您可以显式指定数组元素类型,而不是让类型推断为您设置它:
var shoppingList: [AnyObject] = ["Eggs", 2.0]
将值类型设置为 AnyObject
的明显优势是您不必使自定义 类 继承自 NSObject