Swift等效的Objective-C Block?

时间:2015-03-13 08:41:53

标签: ios objective-c iphone swift

我有以下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表示?

2 个答案:

答案 0 :(得分:4)

var cropBlock: ((UIImage?) -> Void)?

private func cropAction() {
    self.cropBlock?(self.imageScrollView.capture())
}

如果cropBlock可以是nil,则应为Optional

如果self.imageScrollView.capture可以是nilcropBlock的第一个参数应为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的官方文档。