如何传入带委托的对象

How to pass in the object that takes delegate

这个问题的快速搜索没有给我任何结果。同时也不好解释,我想从这个方法就一切都清楚了。请看看这个:

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 需要额外写些什么来避免收到这条消息?或者其他方式?

假设 sender 始终是 UIGestureRecognizerDelegate 类型,您可以使用强制向下转换:

tap.delegate = sender as UIGestureRecognizerDelegate

否则,使用失败的转换:

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

作为参考,请查看 Swift 编程语言指南中包含的 Type Casting for Any and AnyObject

请注意,对我来说,这种分配委托的方式似乎不寻常且容易出错。