为什么数组是Swift中的AnyObject?

mat*_*att 6 ios swift

我无法理解AnyObject的局限性.

您可以从标题中看到Array是一个结构体.不过,这段代码有效:

var whatobject : AnyObject
whatobject = [1,2]
Run Code Online (Sandbox Code Playgroud)

而且它不仅仅是文字数组:

var whatobject : AnyObject
let arr = [1,2,3]
whatobject = arr
Run Code Online (Sandbox Code Playgroud)

但是,我无法分配我所做的结构whatobject:

struct S {}
var whatobject : AnyObject
whatobject = S() // error
Run Code Online (Sandbox Code Playgroud)

那么数组毕竟不是一个真正的结构?

Bry*_*hen 8

当桥接进来时,这是有趣的部分......

默认情况下,Swift桥

  • Int (和朋友)来 NSNumber
  • StringNSString
  • DictionaryNSDictionary

所以如果需要,编译器会将它们更改为对象

你可以做到

var num : AnyObject = 1 // I think num is now NSNumber
var arr : AnyObject = [1,2,3] // I think arr is now NSArray of @[@1,@2,@3]
Run Code Online (Sandbox Code Playgroud)

并且你不能分配sturct/ enumAnyObject因为它们不是对象类型(你可以Any用来保存它们)