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

How to correctly use short Swift closures in calls to ObjC classes

我想在对 NSIndexSet 的调用中使用闭包的简短形式 {[=13=] > 1} class:

let indexSet: NSIndexSet = getSomeIndexSet()
let filteredIndexSet = indexSet.indexesPassingTest(){[=12=] > 1}

但它给了我

Cannot invoke 'indexesPassingTest' with an argument list of type '((_) -> _)'

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

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

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

根据 Martin R 的评论,闭包似乎必须与 2 个参数匹配。因此,可以使用 $0 或 $1,或者如果只使用一个,则 $0 成为元组。

let filteredIndexSet = indexSet.indexesPassingTest { [=10=].0 > 20 }

$0.0表示元组中的第一项是索引。