2014-12-04 72 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() 
} 

反轉的順序(先關閉,最後一個整數)沒有影響,而不是。

相關問題