我正在尝试完成以下任务(使用游乐场): 在数组中存储一个函数列表,然后执行它们。
我正在做的是:
func f1(){
println("f1")
}
var a : [(a: Int, b: (Void) -> Void)] = []
a.append(a: 2, b: f1)
for(var i = a.count-1; i >= 0; i--){
a[i].b()
}
我得到的错误如下:“执行被中断,原因:EXC_BAD_ACCESS(代码= EXC_I386_GPFLT)”正在通话中:
a[i].b()
如果我输入:
a[i].b
游乐场建议我:“(功能)”
我对如何做到这一点有任何想法?我怎么能执行这个功能? 感谢
尽管Swift似乎更喜欢未命名的元组,但新的Swift版本1.2似乎解决了这个问题 (在我的测试中只适用于未命名的元组)
答案 0 :(得分:1)
这绝对闻起来像个臭虫。在故事板中分解它运行的表达式没有问题:
for(var i = a.count-1; i >= 0; i--){
let element = a[i]
let method = element.b
method()
}
在元组中使用时,它可能与闭包有关。
我验证了从元组中删除整数值,它可以工作:
var a : [((Void) -> Void)] = []
a.append(f1)
for(var i = a.count-1; i >= 0; i--){
a[i].0()
}
反转顺序(先闭合,最后整数)无效。