3
在Swift集合默认传值,我们可以使用inout
使它在函数参数中通过引用传递,但我们如何在闭包捕获变量中做到这一点?通过引用快速关闭捕获数组
var list = [1, 2, 3]
func edit(inout list: [Int]) {
list.append(4)
dispatch_async(dispatch_get_main_queue()) {
list.append(5)
}
}
edit(&list)
...// after dispatch_async was executed
NSLog("\(list)")
结果将是[1,2,3,4]
如何修改内部闭合原始变量()?
UPDATE:
其实我有一种解决方法通过将阵列到一个对象来处理这种情况,所以我可以通过引用传递该对象的函数,我们可以修改函数内的同一阵列实例。但我希望看到任何聪明的方法来存档,
感谢您的回复,但有没有机会实现它,而无需访问函数内的任何实例变量?你可以把它当作一个静态函数 – Alan
是的,我根据你的需要编辑我的答案。 – Lawliet
谢谢,你的答案是一种获取数组的新副本的方法,我们可以在完成闭包中更新实例数组变量。但我想知道任何在传入函数后“直接”修改原始数组的机会。对于我在这个问题上的不好解释抱歉。我试过你的代码,全局'list'变量的结果仍然是[1,2,3] – Alan