indexesOfObjectsPassingTest的声明:在Swift中如下所示:
func indexesOfObjectsPassingTest(谓词:((AnyObject !, Int, CMutablePointer< ObjCBool>) - > Bool)! NSIndexSet!我试过各种排列方式让这个工作,但我很沮丧,特别是你如何处理这一块, CMutablePointer< ObjCBool>) - > Bool)!。我发现它很混乱,当我第一次学习块objective-c,如何从声明转换为实际使用的方法,并且Swift的语法至少是混乱。
<这个代码在我的工作在Playground;)希望它帮助一点 额外的功能 - 定义 import Cocoa let list = [2,3,4,5,6,7 ,8] func test(object:AnyObject !, index:Int,stop:CMutablePointer< ObjCBool>) - > Bool { let number = object as Int return(number%2 == 0)// for even numbers } let result: NSIndexSet =(list as NSArray).indexesOfObjectsPassingTest(test) println(\(result.lastIndex))//输出6(因为8%2 = 0) Inline-Closure与内联闭包(在Swift电子书中描述)。参数列表和返回类型由中的项分隔。
import Cocoa let list = [2,3,4,5,6,7, 8] let result:NSIndexSet =(list as NSArray).indexesOfObjectsPassingTest({(object:AnyObject !, index:Int,stop:CMutablePointer< ObjCBool>) - > Bool let number = object as Int return(number%2 == 0)// for even numbers }) println(\ lastIndex))//打印6(因为8%2 = 0)
The declaration of indexesOfObjectsPassingTest: looks like this in Swift,
func indexesOfObjectsPassingTest(predicate: ((AnyObject!, Int, CMutablePointer<ObjCBool>) -> Bool)!) -> NSIndexSet!I've tried all sorts of permutations to get this to work, but I'm stumped, particularly with how you deal with this piece, CMutablePointer<ObjCBool>) -> Bool)!. I found it confusing enough, when I was first learning blocks in objective-c, how you translate from the declaration to actual use of a method, and the syntax of Swift is at least as confusing.
解决方案This code is working in the Playground for me ;) Hope it helps a bit
Extra Function-Definition import Cocoa let list = [2, 3, 4, 5, 6, 7, 8] func test (object: AnyObject!, index: Int, stop: CMutablePointer<ObjCBool>) -> Bool { let number = object as Int return (number % 2 == 0) //for even numbers } let result: NSIndexSet = (list as NSArray).indexesOfObjectsPassingTest(test) println("\(result.lastIndex)") //prints "6" (because 8%2=0)Inline-Closure
I transformed my above example to work with an inline-closure (described in the Swift-eBook). The parameter-list and return-type is separated by the term in.
import Cocoa let list = [2, 3, 4, 5, 6, 7, 8] let result: NSIndexSet = (list as NSArray).indexesOfObjectsPassingTest({ (object: AnyObject!, index: Int, stop: CMutablePointer<ObjCBool>) -> Bool in let number = object as Int return (number % 2 == 0) //for even numbers }) println("\(result.lastIndex)") //prints "6" (because 8%2=0)
更多推荐
如何在Swift中使用indexesOfObjectsPassingTest:
发布评论