【发布时间】:2014-12-27 12:06:45
【问题描述】:
在UIView 的子类中,我声明了一个属性。该属性是UIPanGestureRecognizer 的一个实例,不是可选的或隐式展开的。代码如下:
class DraggableView: UIView {
let panGestureRecognizer: UIPanGestureRecognizer
override init() {
panGestureRecognizer = UIPanGestureRecognizer(target: self, action: "dragged:")
super.init()
backgroundColor = UIColor.greenColor()
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
这里在panGestureRecognizer Xcode 的初始化行给出了一个错误:“self used before super.init call”。如果我将super.init() 行移到panGestureRecognizer 初始化行上方,Xcode 会给出另一个错误:“属性self.panGestureRecognizer 未在super.init 调用时初始化”。最后一次尝试是在init 方法之外的声明中初始化panGestureRecognizer。像这样:
let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: "dragged:")
这里 Xcode 给出了另一个错误:“类型 DraggableView -> () -> DraggableView! 不符合协议 AnyObject”
有没有办法在不使用选项或隐式解包选项的情况下完成这项工作?
【问题讨论】:
标签: swift initialization