2015-06-20 45 views
1

我想使用電話關閉{$0 > 1}的簡短形式NSIndexSet類:如何正確使用通話短斯威夫特閉包ObjC類

let indexSet: NSIndexSet = getSomeIndexSet() 
let filteredIndexSet = indexSet.indexesPassingTest(){$0 > 1} 

,但它給了我

不能援引「 ((_) - > _)的參數列表'indicesPassingTest''

但是這個工作:indexSet.indexesPassingTest(){(i,s) in i > 1}雖然類型na mes仍然不在那裏。

這是一個錯誤還是我錯過了什麼?

回答

5

錯誤消息說明你做錯了什麼。傳遞給block的參數不是兩個不同的參數,而是一個元組的單個參數。所以,你將不得不從元組中訪問每個元素。

根據Martin R的評論,似乎閉包必須匹配2個參數。所以,可以使用$ 0或$ 1,或者如果只使用一個,那麼$ 0就會變成元組。

let filteredIndexSet = indexSet.indexesPassingTest { $0.0 > 20 } 

$ 0.0次指其中是索引元組中的第一個項目。

+0

哇!謝謝!永遠不會想到這個!和Array.reduce結合閉包有什麼區別? –

+3

你可以*使用'$ 0' **和**'$ 1'(在這種情況下'$ 0'是索引,'$ 1'是布爾指針)*或*只是'$ 0'(這是一個元組由索引和指針組成)。比較https://devforums.apple.com/message/1117149#1117149。 「問題」是你不能「省略」未使用的速記參數。 –

+0

@AlexeyMartemyanov:沒有區別。 –