Swift:执行函数作为参数

时间:2014-12-04 18:02:26

标签: ios swift

我正在尝试完成以下任务(使用游乐场): 在数组中存储一个函数列表,然后执行它们。

我正在做的是:

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似乎解决了这个问题 (在我的测试中只适用于未命名的元组)

1 个答案:

答案 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()
}

反转顺序(先闭合,最后整数)无效。