我有一个这样的游乐场:
protocol Foo { func testPrint()}extension Foo { func testPrint() { print("Protocol extension call") }}struct bar: Foo { func testPrint() { // Calling self or super go call default implementation self.testPrint() print("Call from struct") }}let sth = bar()sth.testPrint()
我可以在扩展中提供一个默认实现,但如果bar需要一切在默认实现加上额外的东西?
它在某种程度上类似于调用super。类中的方法来满足实现每个属性的需求等,但是我看不到使用struct实现相同的可能性。
protocol Foo { // func testPrint() <- comment this out or remove it}extension Foo { func testPrint() { print("Protocol extension call") }}struct bar: Foo { func testPrint() { print("Call from struct") (self as Foo).testPrint() // <- cast to Foo and you'll get the default // function defined in the extension }}bar().testPrint()// Output: "Call from struct"// "Protocol extension call"
由于某种原因,它只有在函数未声明为协议的一部分,而是在协议的扩展中定义时才有效。去搞清楚。但它的确工作。
总结以上是内存溢出为你收集整理的swift – 从常规方法调用协议默认实现全部内容,希望文章能够帮你解决swift – 从常规方法调用协议默认实现所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)