我有一個UIView的自定義子類。它有,我已經設置爲所需的恆定平移手勢識別:Catch-22創建一個泛手勢識別器作爲常量?
let dragger: UIPanGestureRecognizer
,因爲它是在視圖的初始化創建一次,持續視圖的一生這是一個常數。
在視圖的指定初始化程序init(coder)
中,我想創建我的平移手勢識別器並將其連接起來。但是,在Xcode 6.3下,如果手勢識別器是常量,我似乎無法做到這一點。 (這只是Xcode 6.3 beta版本下的一個問題)代碼允許我在調用super.init(coder)
之後設置平移手勢初始值設定程序)
由於該變量是一個必需常量,因此需要在調用之前設置它超類init(coder)
。但是,平底手勢識別器的唯一初始化工具將自己作爲參數。直到我呼叫super.init(coder)
之後,自我纔可用。
所以,我不能創建我的通話手勢識別來UIPanGestureRecognizer(target:action:)
以前調用super.init(coder)
因爲我需要通過自我到平移手勢初始化,
...我不能請致電UIPanGestureRecognizer(target:action:)
AFTER調用super.init(coder)
,因爲我必須在調用超類初始化器之前爲所有必需的常量/變量設置值。
我能想出的唯一解決方案是讓我的手勢識別器成爲一個可選的var,我寧願不這樣做。在初始化器完成後它會始終有一個值,並且每次使用它時都必須打開可選的令人討厭的選項。
我在這裏錯過了什麼嗎?
我沒有把它這樣做的時候考到結束,但是編譯器不會拋出一個錯誤:讓牽引= UIPanGestureRecognizer() – Thomas 2015-04-06 13:57:23
然後呢?在調用'super.init(coder)'後添加一個目標/動作到手勢識別器?我猜這是行得通的,但手勢識別器的文檔說'UIPanGestureRecognizer(target:action:)'是指定的初始化器,你應該調用指定的初始化器。 – 2015-04-06 14:04:36
任何事情可以阻止你形成一個懶惰的計算屬性? – 2015-04-06 14:06:54