为什么我不能用 return "Array" 而不是 Swift 中的 NSArray 创建函数?

Why I can't create function with return "Array" instead NSArray in Swift?

Swift 2.0 - Xcode 7.2

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

func returnExampleArray() -> Array {

    return ["term1","term2"]

}

With函数的return在Swift 2.0中默认为"Array",但是Xcode 7.2只允许return与NSArray一起使用,像这样:

func returnExampleArray() -> NSArray {

    return ["term1","term2"]
}

为什么我不能使用 Array 而不是 NSArray?

return Swift 中的 Array 的正确方法是这样写...

func returnExampleArray() -> [String] {    
    return ["term1","term2"]
}

func returnExampleArray() -> [TypeHere] {    
    return [.. objects of correct type here..]
}

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

Fogmeister 的回答是正确的,但并没有真正告诉你原因。

Array 类型是泛型。您不能简单地 return 和 Array 因为 Swift 需要知道您可以在该数组中放入什么。你的第一个函数应该写成:

func returnExampleArray() -> Array<String> 
{
    return ["term1","term2"]
}

但是,数组当然有特殊的表示法。你会把 Array<T> 放在 T 是某种类型的地方,你可以把 [T] 代替,这是原始版本的语法糖,这就是 Fogmeister 的答案的来源。

NSArray 是 Objective-C 类型并且不是通用的(但您几乎可以认为它类似于 Array<AnyObject>)这就是您的第二个示例起作用的原因。然而,在幕后发生了很多事情,因为数组 ["term1","term2"] 必须在 returned 之前转换为 NSStringNSArray