ios – 协议实现协议的默认实现

ios – 协议实现协议的默认实现,第1张

概述我正在尝试创建一个由某些类实现的协议,所有这些类都应该实现UIScrollViewDelegate.我想到的是我的新协议实现协议UIScrollViewDelegate. protocol MyProtocol: UIScrollViewDelegate { var myVar: NSString { get } func myMethod()} 由于协议应具有其默认实现,因此我 我正在尝试创建一个由某些类实现的协议,所有这些类都应该实现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")    }}

它编译,但不起作用.我做错了什么以及创建扩展协议的默认实现的正确方法是什么?

解决方法 你想要做的是以下内容:

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 protocol NSObjectProtocol

此错误是因为uiscrollviewdelegate本身被定义为扩展NSObjectProtocol,这是由NSObject实现的Objective-C协议.

因此,让您的类继承自NSObject以符合NSObjectProtocol. Vanilla Swift课程没有.

总结

以上是内存溢出为你收集整理的ios – 协议实现协议的默认实现全部内容,希望文章能够帮你解决ios – 协议实现协议的默认实现所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1062193.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存