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") }}
它编译,但不起作用.我做错了什么以及创建扩展协议的默认实现的正确方法是什么?
解决方法 你想要做的是以下内容: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
does not conform to protocolNSObjectProtocol
此错误是因为uiscrollviewdelegate本身被定义为扩展NSObjectProtocol,这是由NSObject实现的Objective-C协议.
因此,让您的类继承自NSObject以符合NSObjectProtocol. Vanilla Swift课程没有.
总结以上是内存溢出为你收集整理的ios – 协议实现协议的默认实现全部内容,希望文章能够帮你解决ios – 协议实现协议的默认实现所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)