为什么我不能在Swift中使用返回"Array"而不是NSArray创建函数?

Mar*_*t77 3 arrays xcode nsarray swift2

Swift 2.0 - Xcode 7.2

我想创建一个这样的函数:

func returnExampleArray() -> Array {

    return ["term1","term2"]

}
Run Code Online (Sandbox Code Playgroud)

在Swift 2.0中将函数返回为"Array"默认值,但Xcode 7.2只允许返回NSArray,如下所示:

func returnExampleArray() -> NSArray {

    return ["term1","term2"]
}
Run Code Online (Sandbox Code Playgroud)

为什么我不能使用Array代替NSArray?

Jer*_*myP 7

Fogmeister的答案是正确的,但它并没有真正告诉你为什么.

Array类型是一个泛型类型.你不能简单地返回一个,Array因为Swift需要知道你可以放在那个数组中.你应该写第一个函数:

func returnExampleArray() -> Array<String> 
{
    return ["term1","term2"]
}
Run Code Online (Sandbox Code Playgroud)

但是,当然有阵列的特殊符号.你可以把Array<T>T 放在某种类型的地方,你可以把[T]它换成原始版本的语法糖,这就是Fogmeister的答案来源.

NSArray是一个Objective-C类型,并不是通用的(但你几乎可以认为它是这样的Array<AnyObject>)这就是为什么你的第二个例子有效.然而,很多东西的推移,该阵列幕后["term1","term2"]必须被转换成NSArrayNSStrings的返回之前.


Fog*_*ter 5

Array在Swift中返回一个正确的方法就是这样写它......

func returnExampleArray() -> [String] {    
    return ["term1","term2"]
}
Run Code Online (Sandbox Code Playgroud)

要么

func returnExampleArray() -> [TypeHere] {    
    return [.. objects of correct type here..]
}
Run Code Online (Sandbox Code Playgroud)

如果您在数组中使用其他对象类型.