【发布时间】:2016-12-23 10:57:17
【问题描述】:
我刚刚开始学习 swift 3,我正在将 Objective-c 中的代码转换为 swift 3,但我被困在 typealias。我已经搜索过了,可能已经有正确的帮助,但它并没有解决我的问题。
这是objective-c中的一行:
typedef void (^TagBlock)(NSString *tagText, NSInteger idx);
并且在objective-c中有一个属性为@property (nullable, copy) TagBlock tapBlock;。
现在我将上面的行转换为:
typealias TagBlock = (_ tagText: NSString,_ idx: NSInteger) -> Void
这是我非常了解的语法,属性是 var tapBlock: TagBlock! 在 swift 的情况下。
现在我尝试在 @IBAction 方法之一中调用它:
if (tapBlock != nil) {
self.setTapBlock(tapBlock: (tagButton.titleLabel?.text,tag) -> Void)
}
这给出了一个错误:
'->'之前的预期类型
目标中的这一行是:
if (_tapBlock) {
_tapBlock(sender.titleLabel.text, self.tag);
}
更新在import UIKit 之后我添加了typealias TagBlock = ((String, Int) -> Void)? 之后var tapBlock: TagBlock!
在class TagView: UIView 中我正在调用@987654333 @as
@IBAction func tagTapped(_ sender: Any) {
if (tapBlock != nil) {
tapBlock?(sender.titleLabel.text, self.tag)
}
}
所以在tapBlock?(sender.titleLabel.text, self.tag) 它给了我错误:
不能调用非函数类型'TagBlock'的值`
【问题讨论】:
标签: ios swift3 objective-c-blocks type-alias