如何从函数返回可变数组?
以下是一段简短的代码,以便更清晰:
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"]
谢谢!
答案 0 :(得分:2)
斯威夫特不鼓励这整个范例。 swift中的数组是“值类型”,意味着它们每次传递时都会被复制。这意味着一旦将数组传递给函数,就不能让该函数修改原始数组的内容。这样更安全。
你能做的是:
var newArray = arrayAtIndex(0)
newArray.removeObjectAtIndex(0)
但请注意,tasks
不会被修改。 NewArray
将是tasks
的副本,其中第一个对象已移除
这与NSMutableArray一起使用的原因是NSArray和NSMutableArray是通过引用复制的,因此除非明确复制,否则它们总是引用原始数组。