2015-03-03 48 views
0

快速搜索這個問題並沒有給我什麼。同時很難解釋,我想這一方法很明顯。在這看看,請:如何傳遞需要委託的對象

func tap(sender: AnyObject, action: Selector) -> UITapGestureRecognizer { 
     let tap = UITapGestureRecognizer(target: sender, action: action) 
     tap.delegate = sender 
     return tap 
    } 

錯誤:

Type 'AnyObject' does not conform to protocol 'UIGestureRecognizerDelegate' 

問題是什麼需要編寫額外的AnyObject以避免收到此消息的?或者其他方式?

+3

直接編寫這段代碼而不是製作截圖會出現什麼問題? – 2015-03-03 13:52:25

+0

已編輯。理解速度比現在快。我相信答案很簡單。 – Michael 2015-03-03 14:00:01

回答

1

假設,即sender始終是類型的UIGestureRecognizerDelegate你可以使用一個沮喪的強制:

tap.delegate = sender as UIGestureRecognizerDelegate 

否則,使用一個失敗的轉換:

if let delegate = sender as? UIGestureRecognizerDelegate 
{ 
    tap.delegate = delegate 
} 

爲參照,中有一看Type Casting for Any and AnyObject在Swift編程語言指南中。

請注意,對我來說,這種分配委託的風格似乎很不尋常且容易出錯。

+0

謝謝,不知道這種方式。這只是爲了避免代碼重複。我有很多使用這種方法的視圖。謝謝 – Michael 2015-03-03 14:12:15

+0

只是想說,可能有替代方案;) – 2015-03-03 14:13:04

+1

另一種解決方案:func tap(發件人:UIGestureRecognizerDelegate,操作:選擇器) - > UITapGestureRecognizer {...} – LoVo 2015-03-03 14:26:34