我有以下Objective-C语法:
@property (nonatomic, copy) void(^cropBlock)(UIImage *image);
- (void)cropAction {
if (self.cropBlock) {
self.cropBlock(self.imageScrollView.capture);
}
}
我需要Swift等效语法,我尝试过:
var cropBlock: (UIImage) -> Void
private func cropAction() {
if (self.cropBlock != nil) {
self.cropBlock(self.imageScrollView.capture);
}
}
但是我得到了错误:
(UIImage) -> Void' is not convertible to 'UInt8
什么是正确的Swift表示?
答案 0 :(得分:4)
var cropBlock: ((UIImage?) -> Void)?
private func cropAction() {
self.cropBlock?(self.imageScrollView.capture())
}
如果cropBlock
可以是nil
,则应为Optional
。
如果self.imageScrollView.capture
可以是nil
,cropBlock
的第一个参数应为Optional
。
self.cropBlock?(self.imageScrollView.capture())
是以下的捷径:
if let fn = self.cropBlock {
fn(self.imageScrollView.capture())
}
答案 1 :(得分:0)
在Swift中将其定义为一个typealias:
typealias CropBlock = (image : UIImage) -> ()
有关更多信息,请阅读typealias here的官方文档。