【发布时间】:2016-02-09 12:26:49
【问题描述】:
我正在尝试创建一个由某些类实现的协议,它们都应该实现UIScrollViewDelegate。我想到的是让我的新协议实现协议UIScrollViewDelegate。
protocol MyProtocol: UIScrollViewDelegate {
var myVar: NSString { get }
func myMethod()
}
由于协议应该有它的默认实现,我还为此协议创建了一个扩展。
extension MyProtocol {
func myMethod() {
print("I'm printing")
}
func scrollViewDidScroll(scrollView: UIScrollView) {
print("I'm scrollin")
}
}
它可以编译,但不起作用。我做错了什么以及创建扩展协议的默认实现的正确方法是什么?
【问题讨论】:
-
我认为你是在正确的轨道上。我的猜测是您必须在协议中覆盖委托的设置器并调用 super.delegate = theDelegate
-
“它不起作用”是什么意思。发生什么了?这不是对问题的可接受描述。
-
乍一看,您走在了正确的轨道上,但从 Swift 2.2 开始,在协议扩展中定义的委托方法不会从 Objective-C 代码中“找到”。需要扩展符合
UIScrollViewDelegate的类,即在具体类MyScrollViewDelegate或MyScrollViewViewController中定义扩展方法scrollViewDidScroll。 -
@nhgrif 表示没有进入函数
标签: ios swift uiscrollviewdelegate swift-extensions swift-protocols