字符串不是对象

Strings aren’t objects

根据这个post:http://roadfiresoftware.com/2014/07/swift-strings-arent-objects/ 字符串不是 swift 中的对象。所以我们不能使用 "AnyObject" 作为字符串,我们应该使用类型 "Any" 来代替。

但是当我将字符串分配给 AnyObject 时,它正在工作。

例如:

let str:String = "myString"
let things: [AnyObject] = ["hello",str, 3]


for item in things
{
    println(item)
}

输出:

hello
myString
3

我错过了什么?

String 是值类型而不是引用类型是正确的。然而,为了保持与现有 API 的兼容性,Swift 在 Swift 的 String 和 Foundation 的 NSString 之间提供隐式和自动桥接,这是一种引用类型。

因此,当 swift 字符串转换为 AnyObject 时,它会自动桥接到 NSString

请注意,swift 数组、字典和数字类型也有桥接对应物(分别为 NSArrayNSDictionaryNSNumber