一尘不染

为什么数组在Swift中是AnyObject?

swift

我无法理解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

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


阅读 245

收藏
2020-07-07

共1个答案

一尘不染

这是桥接出现时最有趣的部分…

默认情况下,Swift bridge

  • 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]

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

2020-07-07