我正在尝试创建一个由某些类实现的协议,所有这些协议都应该实现return $.eachReturn(someArray, function(i){
...
。我想到的是我的新协议实现协议UIScrollViewDelegate
。
UIScrollViewDelegate
由于协议应该有默认实现,我还为此协议创建了一个扩展。
protocol MyProtocol: UIScrollViewDelegate {
var myVar: NSString { get }
func myMethod()
}
它编译,但不起作用。我做错了什么以及创建扩展协议的默认实现的正确方法是什么?
答案 0 :(得分:5)
您想要做的是以下内容:
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。 Vanilla Swift课程没有。