以下代码给出了编译错误,因为它认为传递给函数的数组不再可变。我知道Array是一个结构,因此通过值而不是引用传递,所以你如何处理类似于你将结构传递给方法并且你想能够修改它的东西呢? 在这种情况下不想使用扩展程序。
var array = ["1", "2", "3"]
array.removeLast()
removeOne(array)
func removeOne(array: Array<AnyObject>) {
array.removeLast()
}
答案 0 :(得分:4)
@Mike S上面的答案是正确的,但是如果你想将它用于任何类型,你需要一个通用函数:
func removeOne<T>(inout array: Array<T>) {
array.removeLast()
}
var array = ["1", "2", "3"]
removeOne(&array)
答案 1 :(得分:1)
您可以使用in-out parameter执行此操作:
func removeOne(inout array: Array<String>) {
array.removeLast()
}
var array = ["1", "2", "3"]
array.removeLast()
removeOne(&array)
另请注意,我已将Array<AnyObject>
更改为Array<String>
,因为编译器会将var array = ["1", "2", "3"]
定义为Array<String>
,并且无法将其转换为Array<AnyObject>
}}