【发布时间】:2015-05-27 09:22:10
【问题描述】:
我正在尝试在 Swift 中使用委托模式并得到以下代码:
protocol NumericViewDelegate {
func one()
}
class NumericView: UIView {
var delegate: NumericViewDelegate?
override init(frame: CGRect) {
super.init(frame: frame)
var oneButton = UIButton(frame: CGRectMake(0.0, 100.0, 200.0, 100.0))
oneButton.titleLabel?.text = "one"
oneButton.backgroundColor = UIColor.blueColor()
oneButton.addTarget(self.delegate!, action: "one:", forControlEvents: UIControlEvents.TouchUpOutside)
self.addSubview(oneButton)
}
required init(coder aDecoder: NSCoder
) {
super.init(coder: aDecoder)
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func drawRect(rect: CGRect) {
// Drawing code
}
*/
}
但是声明self.delegate!在addTarget 中不起作用。我收到错误:
无法使用类型参数列表调用“addTarget” '(NumericViewDelegate,动作:字符串,forControlEvents: UIControlEvents)。
在addTarget 中声明self 时有效,但这不是预期的行为。
【问题讨论】:
-
链接完全不相关。它以自我为目标。
-
这个错误是发生在运行时还是编译时?
-
编译时发生。
-
self.delegate.one 采用什么参数?