如何在Swift中将CMutablePointer <ObjCBool​​>设置为false?

Dim*_*ian 11 ios swift

基本上我在Swift中使用AssetsLibrary框架,我怎么能将stop指针的值修改为NO/False/0(我甚至不知道它应该是什么值除外)?

self.library.enumerateGroupsWithTypes(ALAssetsGroupType(ALAssetsGroupSavedPhotos), usingBlock: {(group: ALAssetsGroup!, stop: CMutablePointer<ObjCBool>) in

},
failureBlock: {(error: NSError!) in

})
Run Code Online (Sandbox Code Playgroud)

我应该能够访问该值并使用unsafePointer修改它,但我似乎无法正确编写闭包.

Jea*_*let 17

这相当于*stop = YES;:

stop.withUnsafePointer { $0.memory = true }
Run Code Online (Sandbox Code Playgroud)

为了使它更简洁,你可以做以下事情:

operator infix <- {}

@infix func <- <T>(ptr: CMutablePointer<T>, value: T) {
    ptr.withUnsafePointer { $0.memory = value }
}
Run Code Online (Sandbox Code Playgroud)

然后上面的这一行就变成了这样:

stop <- true
Run Code Online (Sandbox Code Playgroud)

不确定是否推荐的款式,不过......

(您可以从中选择字符/ = - + * % < > ! & | ^ . ~来创建自定义运算符.)

  • 哈哈,我喜欢看到人们提出的操作员超载......这是一个很棒的! (2认同)

Rob*_*Rob 9

从Xcode 6 beta 4开始,您现在可以:

stop.memory = true
Run Code Online (Sandbox Code Playgroud)

或者,正如holex所说,您可以:

stop.initialize(true)
Run Code Online (Sandbox Code Playgroud)