2016-03-16 35 views
1

我有下面的代码 -转换OBJ-C块SWIFT 2封

[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 { 
    } 
}) 

但它抛出关于“不能转换的所有错误在前面和返回之间的类型等的值。有人可以告诉我,这是一个地方,当你不得不使用unsafemutablepointers?如果是这样,我怎么知道这一点。

谢谢!

+0

请问您可以扩展编译器错误,也是您自己写的这个objC代码吗? –

+0

伙计。代码完成只是_hands_你正确的答案。用它。 – matt

回答

2

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

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

或者更紧凑,只是省略了类型,让雨燕从Objective-C的声明推断他们:

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

而且,你不能说在斯威夫特!error,但你可以当你来到它的时候穿过那座桥。

+0

不是大括号周围的parans,只是用参数内部的闭包调用摄像机方法,而不是将它作为尾部闭包传递给方法 - 这只是语法问题,而且实际上是同样的事情。例如。是'foo({...})'和'foo {...}'一样# –

+0

@BlakeLockley是的,修复了我的答案。这是可以空的类型。 – matt