我正在尝试创建一个由特定类实现的协议,它们都应该实现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")
}
}它编译,但不工作。我做错了什么,创建扩展协议的默认实现的正确方法是什么?
发布于 2016-02-09 13:06:21
您要做的是:
protocol MyProtocol{
var myVar: NSString { get }
func myMethod()
}
protocol MyProtocol2{
var myVar2: NSString { get }
func myMethod2()
}
extension MyProtocol where Self: MyProtocol2 {
func myMethod() {
print("I'm printing ")
}
}
class anotherClass: MyProtocol, MyProtocol2 {
var myVar: NSString {
return "Yo"
}
var myVar2: NSString {
return "Yo2"
}
func myMethod2() {
print("I'm printing in myMethod2")
}
}在上面的代码中,MyProtocol2等同于您的UIScrollViewDelegate,
因此,你要做的是:
protocol MyProtocol{
var myVar: NSString { get }
func myMethod()
}
extension MyProtocol where Self: UIScrollViewDelegate {
func myMethod() {
print("I'm printing")
}
}
class anotherClass: NSObject, MyProtocol, UIScrollViewDelegate {
var myVar: NSString {
return "Yo"
}
}注意,另一个类子类NSObject,这是因为如果不这样做,您将得到错误
anotherClass不符合NSObjectProtocol协议
这个错误是因为UIScrollViewDelegate本身被定义为扩展NSObjectProtocol,这是一个由NSObject实现的目标-C协议。
因此,让您的类从NSObject继承以符合NSObjectProtocol。香草斯威夫特类没有。
https://stackoverflow.com/questions/35292065
复制相似问题