为什么Swift中的Array和AnyObject?

时间:2014-06-11 03:44:49

标签: ios 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

所以一个数组毕竟不是一个结构吗?

1 个答案:

答案 0 :(得分:8)

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

默认情况下,Swift bridge

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

所以如果需要

,编译器会将它们更改为object

你可以做到

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来保存它们)