我在区分AnyObject和Any方面遇到了一点麻烦。在Apple的文档中,它说“AnyObject可以表示任何类类型的实例”,但是当我声明一个包含AnyObject的数组时,我能够将结构类型放在那里,而不是类。所以,
var array : [AnyObject] = [6, "Foo", "Bar"]
有效,因为Int是结构类型,所以没有用。我正在尝试与API进行交互,并尝试确定从后端发送的哈希值是否最好用作[String:AnyObject]或[String:Any]。我试图与前者一起使用,因为它更具体。感谢您提前帮助
答案 0 :(得分:0)
我在IBM Swift Sandbox中尝试过此操作,结果如下。
Swift 2.2:
Swift Ver. 2.2 (Jan 11, 2016)
Platform: Linux (x86_64)
ERROR at line 1, col 28: value of type 'Int' does not conform to expected element type 'AnyObject'
var array : [AnyObject] = [6, "Foo", "Bar"]
^
swift-build: error: exit(1): ["/usr/bin/swift-build-tool", "-f", "/swift-execution/.build/debug/TempCode.o/llbuild.yaml"]
Swift 3.0:
Swift Ver. 3.0 (Release)
Platform: Linux (x86_64)
ERROR at line 1, col 28: value of type 'Int' does not conform to expected element type 'AnyObject'
var array : [AnyObject] = [6, "Foo", "Bar"]
^
as! AnyObject
所以它也没有编译。然而,理解这一点非常重要:
...数字文字本身没有明确的类型。它们的类型仅在编译器评估时才推断出它们的类型。
(引自The Swift 3 Language Guide)
例如,6
默认情况下会被评估为Int
,但也可以隐式评估为Double
或Float
或UInt
等等。上下文。例如:
var i : Float = 6 // Perfectly fine - implicitly evaluated as Float
但是这些数字文字不能隐式评估为AnyObject
。