如何从函数返回一个可变数组?
这是一段简短的代码片段,使其更加清晰:
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'
Run Code Online (Sandbox Code Playgroud)
以下片段有效,但我必须返回一个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"]
Run Code Online (Sandbox Code Playgroud)
谢谢!
这整个范式在 Swift 中是不鼓励的。swift 中的数组是“值类型”,这意味着它们每次传递时都会被复制。这意味着一旦将数组传递给函数,就无法让该函数修改原始数组的内容。这样就安全多了。
你可以做的是:
var newArray = arrayAtIndex(0)
newArray.removeObjectAtIndex(0)
Run Code Online (Sandbox Code Playgroud)
但请注意,tasks
不会被修改。将是删除第一个对象后的NewArray
副本tasks
这适用于 NSMutableArray 的原因是 NSArray 和 NSMutableArray 是通过引用复制的,因此除非显式复制,否则它们始终引用原始数组。
归档时间: |
|
查看次数: |
13850 次 |
最近记录: |