如何在调用ObjC类时正确使用短Swift闭包

Ale*_*nov 1 closures nsindexset swift

我想{$0 > 1}在调用NSIndexSet类时使用简短形式的闭包:

let indexSet: NSIndexSet = getSomeIndexSet()
let filteredIndexSet = indexSet.indexesPassingTest(){$0 > 1}
Run Code Online (Sandbox Code Playgroud)

但它给了我

无法使用类型为"((_) - > _)"的参数列表调用"indexesPassingTest"

但这有效:indexSet.indexesPassingTest(){(i,s) in i > 1}虽然类型名称仍然不存在.

这是一个错误还是我错过了什么?

San*_*eep 5

错误消息说明你做错了什么.传递给块的参数不是两个不同的参数,而是一个单元参数,它是元组.因此,您必须访问元组中的每个元素.

基于Martin R的评论,似乎闭包必须匹配2个参数.因此,可以使用$ 0或$ 1,或者只使用一个,然后$ 0变为元组.

let filteredIndexSet = indexSet.indexesPassingTest { $0.0 > 20 }
Run Code Online (Sandbox Code Playgroud)

$ 0.0次指其中是索引元组中的第一个项目.

  • 你可以**使用`$ 0`**和**`$ 1`(在这种情况下`$ 0`是索引而`$ 1`是布尔指针)*或*只是`$ 0`(这是一个元组组成的元组索引和指针).比较https://devforums.apple.com/message/1117149#1117149."问题"是你不能"省略"未使用的速记参数. (3认同)