Swift 2.0:协议扩展:具有相同功能签名编译错误的两个协议
鉴于两个协议及其扩展:
protocol FirstDelegate { func someFunc() } protocol SecondDelegate { func someFunc() } extension FirstDelegate { func someFunc() { print("First delegate") } } extension SecondDelegate { func someFunc() { print("Second delegate") } } 并试图符合他们两个: class SomeClass: FirstDelegate,SecondDelegate {} 我收到编译时错误:
交换第一名和第二名 class SomeClass: SecondDelegate,FirstDelegate {} 产生反向
删除其中一个扩展解决了问题.同时提供SomeClass中someFunc()的实现. 这个协议扩展功能对我来说是比较新的.此外,苹果官方的“Swift编程指南(Prerelease)”中的信息目前很少. 我是否违反了一些协议扩展规则?
协议定义了a的要求(方法,属性,…)
一致型 protocol FirstDelegate { func someFunc() } protocol SecondDelegate { func someFunc() } 定义了两个具有相同所需方法someFunc()的协议. class SomeClass: FirstDelegate,SecondDelegate { func someFunc() { print("SomeClass implementation") } } 协议扩展提供方法和属性实现 extension FirstDelegate { func someFunc() { print("First delegate") } } 它为所有类型定义了someFunc()的默认实现 class SomeClass: FirstDelegate { } SomeClass().someFunc() // Output: First delegate 但是如果该类提供了自己的实现,那么那个 class SomeClass: FirstDelegate { func someFunc() { print("SomeClass implementation") } } SomeClass().someFunc() // Output: SomeClass implementation 在您的情况下,您已定义someFunc()的默认实现 extension FirstDelegate { func someFunc() { print("First delegate") } } extension SecondDelegate { func someFunc() { print("Second delegate") } } 如果一个类提供自己的类,它仍然可以符合两个协议 class SomeClass: FirstDelegate,SecondDelegate { func someFunc() { print("SomeClass implementation") } } 但是类不能通过使用默认实现 class SomeClass: FirstDelegate,SecondDelegate { } 对于两个协议 实际上,该类现在符合任何协议. main.swift:24:7: error: type 'SomeClass' does not conform to protocol 'FirstDelegate' class SomeClass: FirstDelegate,SecondDelegate { ^ main.swift:5:10: note: multiple matching functions named 'someFunc()' with type '() -> ()' func someFunc() ^ main.swift:19:10: note: candidate exactly matches func someFunc() { ^ main.swift:13:10: note: candidate exactly matches func someFunc() { ^ main.swift:24:7: error: type 'SomeClass' does not conform to protocol 'SecondDelegate' class SomeClass: FirstDelegate,SecondDelegate { ^ main.swift:9:10: note: multiple matching functions named 'someFunc()' with type '() -> ()' func someFunc() ^ main.swift:19:10: note: candidate exactly matches func someFunc() { ^ main.swift:13:10: note: candidate exactly matches func someFunc() { ^ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |