我在理解AnyObject的局限性时遇到了麻烦。

您可以从标题中看到Array是一个结构。但是,此代码有效:

var whatobject : AnyObject
whatobject = [1,2]

而且不只是文字数组:
var whatobject : AnyObject
let arr = [1,2,3]
whatobject = arr

但是,我无法将我创建的结构分配给whatobject:
struct S {}
var whatobject : AnyObject
whatobject = S() // error

那么,数组毕竟不是真正的结构吗?

最佳答案

当桥接出现时,这就是有趣的部分...

默认情况下,Swift桥

  • Int(和 friend )到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]
    

    并且您不能将sturct/enum分配给AnyObject,因为它们不是对象类型(您可以使用Any来保存它们)

    关于ios - 为什么数组在Swift中是AnyObject?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24154304/

    10-12 20:08