概述实验样本代码 //声明一个协议protocol SharedString { func methodForOverride() -> Void func methodWithoutOverride() -> Void}//
扩展协议,实现默认实现//注意方法methodWithoutOverride 中调用了 methodForOverride 方法,这里有一个上写文切换的 实验样本代码
//声明一个协议protocol SharedString { func methodForOverrIDe() -> VoID func methoDWithoutOverrIDe() -> VoID}//扩展协议,实现默认实现//注意方法methoDWithoutOverrIDe 中调用了 methodForOverrIDe 方法,这里有一个上写文切换的问题extension SharedString { func methodForOverrIDe() -> VoID { print(@H_502_23@"��") } func methoDWithoutOverrIDe() -> VoID { print(@H_502_23@"��") methodForOverrIDe() print(@H_502_23@"��") }}//在String类的扩展中遵守并实现协议extension String:SharedString { func methodForOverrIDe() -> VoID { print(self) }}//创建字符串并切换上下文到SharedString协议let Shared:SharedString = @H_502_23@"hello"Shared.methodForOverrIDe()Shared.methoDWithoutOverrIDe()
变换不同代码得到的执行结果总结
情况编号 | 协议中声明方法 | 协议扩展中默认实现 | 遵循协议类中重写 | 实验属性遵循协议(转换上下文) | 执行方法结果方法 |
1 | YES | NO | YES | NO | 遵循协议类中重写的方法 |
2 | YES | YES | YES | YES | 遵循协议类中重写的方法 |
3 | YES | NO | YES | YES | 遵循协议类中重写的方法 |
4 | NO | NO | YES | NO | 遵循协议类中重写的方法 |
5 | YES | YES | YES | NO | 遵循协议类中重写的方法 |
6 | NO | YES | NO | YES | 协议扩展中的默认实现 |
7 | NO | YES | NO | NO | 协议扩展中的默认实现 |
8 | YES | YES | NO | YES | 协议扩展中的默认实现 |
9 | YES | YES | NO | NO | 协议扩展中的默认实现 |
10 | NO | YES | YES | YES | 协议扩展中的默认实现 |
11 | NO | YES | YES | NO | 方法1、2都是协议扩展中的方法。方法1,在遵循类中被重写,调用方法1,是遵循协议类中重写的方法。方法2没有被重写,但是在协议中方法2调用了方法1,这时,方法2调用时方法1依旧是协议扩展中的默认实现 |
12 | NO | NO | YES | YES | ERROR |
13 | NO | NO | NO | YES | ERROR |
14 | NO | NO | NO | NO | ERROR |
15 | YES | NO | NO | NO | ERROR |
16 | YES | NO | NO | YES | EROOR |
@H_633_301@ 重写协议扩展中定义的方法,协议扩展的静态特性保留了方法的原版盒被重写版本,你可以通过切换上下文获得不同的版本,同时对于没有重写的方法,可以保证其不变性。
我们可以遵循一个原则,把那些希望被重写的方法定义在协议中,那些不希望被复写的方法的定义和实现放在协议扩展中。
总结 以上是内存溢出为你收集整理的Swift 关于Protocol扩展的静态特性全部内容,希望文章能够帮你解决Swift 关于Protocol扩展的静态特性所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
赞
(0)
打赏
微信扫一扫
支付宝扫一扫
评论列表(0条)