Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 为什么';是否可以不实现UIgestureRecognitzerDelegate协议的所有方法?_Swift_Protocols - Fatal编程技术网

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