我有一个快速的协议:
@objc protocol SomeDelegate {
optional func myFunction()
}
Run Code Online (Sandbox Code Playgroud)
我做了我的一个课程:
weak var delegate: SomeDelegate?
Run Code Online (Sandbox Code Playgroud)
现在,我要检查是否delegate
已经myFunction
实现.
在objective-c中,我可以这样做:
if ([delegate respondsToSelector:@selector(myFunction)]) {
...
}
Run Code Online (Sandbox Code Playgroud)
但这在Swift中不可用.
编辑:这与以下内容不同:respontsToSelector的快速等价物是什么?我专注于不在类上的类协议.
如何检查我的委托是否已实施可选方法?
Tom*_*mmy 29
Per Swift编程语言:
您可以通过在调用需求名称后面写一个问号来检查可选需求的实现,例如someOptionalMethod?(someArgument).可选属性要求和返回值的可选方法要求在访问或调用时始终返回适当类型的可选值,以反映可选要求可能尚未实现的事实.
因此,目的不是要检查方法是否已实现,而是尝试无论如何调用它并获得可选的返回方法.
new*_*cct 15
你可以做
if delegate?.myFunction != nil {
}
Run Code Online (Sandbox Code Playgroud)
我发现成功添加了定义基本默认实现的协议的扩展,然后任何实现协议的类只需要覆盖感兴趣的函数.
public protocol PresenterDelegate : class {
func presenterDidRefreshCompleteLayout(presenter: Presenter)
func presenterShouldDoSomething(presenter: Presenter) -> Bool
}
Run Code Online (Sandbox Code Playgroud)
然后延长
extension PresenterDelegate {
public func presenterDidRefreshCompleteLayout(presenter: Presenter) {}
public func presenterShouldDoSomething(presenter: Presenter) -> Bool {
return true
}
}
Run Code Online (Sandbox Code Playgroud)
现在任何需要符合PresenterDelegate协议的类都已经实现了所有功能,因此现在可以选择覆盖它的功能.
归档时间: |
|
查看次数: |
20328 次 |
最近记录: |