Ios 是否将UIgestureRecognitor初始化为Swift中属性定义的一部分?

Ios 是否将UIgestureRecognitor初始化为Swift中属性定义的一部分?,ios,swift,uigesturerecognizer,initializer,Ios,Swift,Uigesturerecognizer,Initializer,我想初始化一个uipangestureerecognizer,作为UIViewController属性定义的一部分,这样我就不必声明它是可选的(如果初始化只发生在viewDidLoad中,我就必须这样做) 以下两次尝试都在编译时失败(我使用的是最新版本的Xcode): 还有其他有效的语法可以完成这项工作吗?问题是,在self准备就绪之前,您正在添加self作为目标 你可以创建手势识别器,调用super init,然后将self添加为目标,我认为这会起作用 我个人倾向于将此设置为lazy var,

我想初始化一个
uipangestureerecognizer
,作为
UIViewController
属性定义的一部分,这样我就不必声明它是可选的(如果初始化只发生在
viewDidLoad
中,我就必须这样做)

以下两次尝试都在编译时失败(我使用的是最新版本的Xcode):


还有其他有效的语法可以完成这项工作吗?

问题是,在
self
准备就绪之前,您正在添加
self
作为目标

你可以创建手势识别器,调用super init,然后将self添加为目标,我认为这会起作用


我个人倾向于将此设置为
lazy var
,而不是
let
。它使它保持封装状态,并使您无需重写init方法

Thx。创建手势识别器,调用super init,然后添加self作为目标确实有效。
-- 1st attempt
class TestController: UIViewController {

    let panGestureRecognizer: UIPanGestureRecognizer

    required init(coder: NSCoder) {
        super.init(coder: coder)
        panGestureRecognizer = UIPanGestureRecognizer(  target: self, action: "handlePan:")
        // fails with "Property 'self.panGestureRecognizer' not initialized at super.init call' or
        // fails with "'self' used before super.init call'
        // depending on the order of the two previous statements
    }
}

-- 2st attempt
class TestController: UIViewController {

    let panGestureRecognizer = UIPanGestureRecognizer(target:self, action: "handlePan:")
    // fails with "Type 'TestController -> () -> TestController!' does not conform to protocol 'AnyObject'
}