【问题标题】:Why I can't create function with return "Array" instead NSArray in Swift?为什么我不能在 Swift 中创建返回“Array”而不是 NSArray 的函数?
【发布时间】:2015-11-25 15:42:09
【问题描述】:

Swift 2.0 - Xcode 7.2

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

func returnExampleArray() -> Array {

    return ["term1","term2"]

}

在 Swift 2.0 中函数默认返回为“Array”,但 Xcode 7.2 只允许使用 NSArray 返回,如下所示:

func returnExampleArray() -> NSArray {

    return ["term1","term2"]
}

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

【问题讨论】:

  • “只允许”是什么意思?它说什么?
  • Xcode 显示错误,但我不知道我是这样的程序:“引用泛型类型 'Array' 需要 '' 中的参数...”
  • 也许您以后可以引用任何错误消息?然而,你有你的答案(见下文)。

标签: arrays xcode nsarray swift2


【解决方案1】:

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

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

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

但是,数组当然有特殊的符号。你可以把Array&lt;T&gt; 放在哪里 T 是某种类型,你可以把[T] 代替,这是原始版本的语法糖,这就是 Fogmeister 的答案的来源。

NSArray 是一种 Objective-C 类型并且不是通用的(但您几乎可以将其视为类似于 Array&lt;AnyObject&gt;)这就是您的第二个示例有效的原因。但是,很多事情都在幕后进行,数组["term1","term2"] 必须在返回之前转换为NSStrings 的NSArray

【讨论】:

  • 感谢您的详细解释。
【解决方案2】:

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

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

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

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

【讨论】:

  • @MartinSt77 乐于提供帮助。确保接受能解决您问题的答案。 :)
  • 对不起,我不是故意挖他接受的。已投票作为补偿:)
猜你喜欢
  • 1970-01-01
  • 2019-10-10
  • 1970-01-01
  • 1970-01-01
  • 2011-02-01
  • 2011-06-02
  • 1970-01-01
  • 1970-01-01
  • 2021-11-16
相关资源
最近更新 更多