2014-12-04 43 views
3

我正试图完成以下任务(使用操场): 将函数列表存储在一个数组中,然后执行它们。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() 

而如果I型:

a[i].b 

游乐场建议我: “(功能)”

有关我如何做到这一点的任何想法?我怎样才能执行该功能? 感谢


即使斯威夫特似乎更喜欢无名元组的问题似乎与新雨燕1.2版 (在我的测试中,只有未命名的元组工作)

+1

通过使用两次,您已经很难理解该示例。你不能用恰当的词语代替a,a和b。 – Fogmeister 2014-12-04 18:10:37

+2

看起来像一个bug给我。在调试模式下运行时,这里有同样的异常,并且在编译Release模式时Xcode 6.1.1崩溃。 – 2014-12-04 18:13:02

+0

似乎固定在Swift 1.2中,我更新了这个问题 – 2015-04-10 14:59:11

回答

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

反转的顺序(先关闭,最后一个整数)没有影响,而不是。

相关问题