如何在调用 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表示元组中的第一项是索引。
我想在对 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表示元组中的第一项是索引。