为什么Swift数组<Int>与AnyObject兼容?

rgh*_*ome 2 arrays object swift

考虑一下代码:

struct S {
    var f : Int64 = 0
}

...

let coder : NSCoder = someCoder ...
let a : [Int] = []
coder.encodeObject(a)  // compiles
let b : [Int64] = []
coder.encodeObject(b)  // doesn't compile: not AnyObject
let s : [S] = []
coder.encodeObject(s)  // doesn't compile: not AnyObject
Run Code Online (Sandbox Code Playgroud)

注意,Int定义为a struct.

所以[Int]为对象,但[Int64]不是也不是我的简单结构的阵列.

有什么特别的Int

Rob*_*ier 5

如果你导入Foundation(你必须是,因为你引用NSCoder)然后[Int]隐式桥接到NSArray因为Int隐式桥接到NSNumber.Int64并且您的非objc结构不会隐式桥接到ObjC类型,因此这些结构的数组不会桥接到NSArray.