Swift 为什么';是否可以不实现UIgestureRecognitzerDelegate协议的所有方法?
在网上阅读资料时,我注意到通常会定义一个视图控制器类来采用Swift 为什么';是否可以不实现UIgestureRecognitzerDelegate协议的所有方法?,swift,protocols,Swift,Protocols,在网上阅读资料时,我注意到通常会定义一个视图控制器类来采用UIgestureRecognitizerDelegate协议,但只实现其方法之一:gestureRecognitizer(gestureRecognitizer,应与gestureRecognitizer同时识别)。例如,参见本文() 我想知道为什么会这样。我认为协议的所有方法都应该实现,对吗?我检查了UIViewControl文档,它没有提到类实现了这些方法。那么,这些方法是可选的,还是为协议定义了一个扩展来提供默认实现?我检查了UI
UIgestureRecognitizerDelegate
协议,但只实现其方法之一:gestureRecognitizer(gestureRecognitizer,应与gestureRecognitizer同时识别)
。例如,参见本文()
我想知道为什么会这样。我认为协议的所有方法都应该实现,对吗?我检查了
UIViewControl
文档,它没有提到类实现了这些方法。那么,这些方法是可选的,还是为协议定义了一个扩展来提供默认实现?我检查了UIgestureRecognitizerDelegate
协议文档,但没有任何内容表明这两个内容。如果您查看
optional func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool
参见单词可选
?这就是魔力所在。您也可以定义这样的方法。您只需要将您的协议和方法标记为@Objc
,因为optional
是一个Obj-C:thing:
@objc protocol P {
@objc optional func f()
}
class C : P {}
f
的作用就好像它是一个(()->无效)
:
如果您查看该声明,您将看到:
optional func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool
参见单词可选
?这就是魔力所在。您也可以定义这样的方法。您只需要将您的协议和方法标记为@Objc
,因为optional
是一个Obj-C:thing:
@objc protocol P {
@objc optional func f()
}
class C : P {}
f
的作用就好像它是一个(()->无效)
:
谢谢我想我检查了所有我能找到的文档,但是我没有点击函数声明。我认为可选关键字也应该出现在
uigestureRecognitizerDelegate
文档的函数签名中。@rayx有时协议的文档页面会说“此协议的所有方法都是可选的”,但显然不是uigestureRecognitizerDelegate
。谢谢!我想我检查了所有我能找到的文档,但是我没有点击函数声明。我认为可选关键字也应该出现在uigestureRecognitizerDelegate
文档的函数签名中。@rayx有时协议的文档页面会说“此协议的所有方法都是可选的”,但显然不是uigestureRecognitizerDelegate
。