任何具有结构类型

时间:2016-10-12 18:01:11

标签: swift struct

我在区分AnyObject和Any方面遇到了一点麻烦。在Apple的文档中,它说“AnyObject可以表示任何类类型的实例”,但是当我声明一个包含AnyObject的数组时,我能够将结构类型放在那里,而不是类。所以,

var array : [AnyObject] = [6, "Foo", "Bar"]

有效,因为Int是结构类型,所以没有用。我正在尝试与API进行交互,并尝试确定从后端发送的哈希值是否最好用作[String:AnyObject]或[String:Any]。我试图与前者一起使用,因为它更具体。感谢您提前帮助

1 个答案:

答案 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,但也可以隐式评估为DoubleFloatUInt等等。上下文。例如:

var i : Float = 6 // Perfectly fine - implicitly evaluated as Float

但是这些数字文字不能隐式评估为AnyObject