将obj-c块转换为swift 2闭包

时间:2016-03-16 00:35:47

标签: closures objective-c-blocks

我有以下代码 -

[self.camera capture:^(LLSimpleCamera *camera, UIImage *image, NSDictionary *metadata, NSError *error) {
    if(!error) {    
       }
}];

对我来说,应转换为

self.camera.capture({(camera: LLSimpleCamera, image: UIImage, metadata: [NSObject : AnyObject], error: NSError) -> Void in
    if !error {
    }
})

但它抛出了所有关于'的错误,无法转换类型等的值,在前面和返回的Void部分之间。有人能告诉我,这是一个你必须使用unSafeMutablePointers的地方吗?如果是这样,我怎么知道呢。

谢谢!

1 个答案:

答案 0 :(得分:2)

问题是这些都是无效的,所以你需要感叹号。所以:

self.camera.capture { 
    (camera:LLSimpleCamera!, image:UIImage!, metadata:[NSObject : AnyObject]!, error:NSError!) -> Void in
    // whatever
}

或者更紧凑,只是省略类型,让Swift从Objective-C声明中推断它们:

self.camera.capture { 
    camera, image, metadata, error in
    // whatever
}

另外,你不能在Swift中说!error,但是当你来到它时你可以越过那座桥。