Obj C to Swift Conversion - Closures

时间:2015-03-23 11:45:51

标签: ios objective-c swift

我如何使用Swift调用它?似乎无法获得正确的语法!

@property (nonatomic, copy) void(^testBlock)(UIImage *image);

到目前为止,我已经:

imag.testBlock({(image:UIImage)->Void in
    println("test")
})

但它给了我一个错误:

(UIImage) - > Void不能转换为UIImage

3 个答案:

答案 0 :(得分:1)

您的testBlock是绑定到函数的Objective-C属性。那么,在您的问题代码中,您是要分配testBlock还是要调用绑定到testBlock的函数?

imag.testBlock = { (image:UIImage) -> Void in
  println ("test")
}

然后使用:

imag.testBlock (/* call with some image */)

答案 1 :(得分:0)

定义闭包时: 闭包通常用大括号{}括起来,并由函数类型() - >定义。 (),其中 - >分隔参数和返回类型,后跟in关键字,用于将闭包头与其主体分开。

{ (params) -> returnType in
  statements
} 

请参阅:http://fuckingswiftblocksyntax.com/

所以在你的情况下你不应该使用Void作为returnType,当你想要返回一个UIImage

imag.testBlock( { (image: UIImage) -> UIImage in
     return UIImage(....) 
}

答案 2 :(得分:0)

您的Objective-C属性是一个采用UIImage参数的块。当你这样做

imag.testBlock({(image:UIImage)->Void in
    println("test")
})

您正在调用该区块并传入另一个区块,这对您的情况没有意义。

您需要的只是imag.testBlock(UIImage(named: "some_image"))