Swift中的奇怪类型数组

Sob*_*man 1 cocoa cocoa-touch ios swift

我正在学习Swift,但遇到了Swift的Array类的奇怪行为(未记录),或者,至少在任何地方都没有找到它。

当我创建Array这样的:

var myRegularArray: Array = [Int]()
Run Code Online (Sandbox Code Playgroud)

或像这样:

var myRegularArray: Array = [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

然后一切都按照书进行:数组是通过常规语法创建的,并且具有定义的类型等。

当我输入如下内容时:

var myStrangeArray = ["Some text", 42]
Run Code Online (Sandbox Code Playgroud)

编译器将其视为NSObject实例,而不是an Array或甚至NSArray。如果我使用这种语法Array怎么办?为什么它不是实例?

rin*_*aro 5

不是,NSObject但是[NSObject]那是Array<NSObject>

那么,为什么编译器将其推断为Array<NSObject>?因为NSObject是元素的唯一常见类型。

在这种情况下,"Some text"被推断为NSString,并且42被推断为NSNumber。并且NSObject是他们中最新,唯一的祖先。

  • 为什么使用`variable [2]`,而不是`myRegularArray [2]`?`println(myRegularArray [2])`打印`2014-12-09 10:19:57 + 0000`之类的东西。 (2认同)