从函数返回可变数组

时间:2014-06-08 18:40:53

标签: swift

如何从函数返回可变数组?

以下是一段简短的代码,以便更清晰:

var tasks = ["Mow the lawn", "Call Mom"]
var completedTasks = ["Bake a cake"]

func arrayAtIndex(index: Int) -> String[] {
    if index == 0 {
        return tasks
    } else {
        return completedTasks
    }
}

arrayAtIndex(0).removeAtIndex(0)
// Immutable value of type 'String[]' only has mutating members named 'removeAtIndex'

以下代码段有效,但我必须返回Array,而不是NSMutableArray

var tasks: NSMutableArray = ["Mow the lawn", "Call Mom"]
var completedTasks: NSMutableArray = ["Bake a cake"]

func arrayAtIndex(index: Int) -> NSMutableArray {
    if index == 0 {
        return tasks
    } else {
        return completedTasks
    }
}

arrayAtIndex(0).removeObjectAtIndex(0)

tasks // ["Call Mom"]

谢谢!

1 个答案:

答案 0 :(得分:2)

斯威夫特不鼓励这整个范例。 swift中的数组是“值类型”,意味着它们每次传递时都会被复制。这意味着一旦将数组传递给函数,就不能让该函数修改原始数组的内容。这样更安全。

你能做的是:

var newArray = arrayAtIndex(0)
newArray.removeObjectAtIndex(0)

但请注意,tasks不会被修改。 NewArray将是tasks的副本,其中第一个对象已移除

这与NSMutableArray一起使用的原因是NSArray和NSMutableArray是通过引用复制的,因此除非明确复制,否则它们总是引用原始数组。