使用 Swift 协议和扩展覆盖对象方法
Posted
技术标签:
【中文标题】使用 Swift 协议和扩展覆盖对象方法【英文标题】:Override object method using Swift protocols and extensions 【发布时间】:2020-04-28 18:24:43 【问题描述】:我想重写一个在框架中声明并在扩展中实现的方法。
这是我尝试过的:
import UIKit
// Code from a dependency
class Object // UIViewController
func printSomething()
print("something")
// My code
protocol SayHelloProtocol
func hello()
func name() -> String
extension SayHelloProtocol
func hello()
print("Hello " + name())
func name() -> String
"someone"
class MyHelloObject: Object, SayHelloProtocol
override func printSomething()
hello()
class MyHelloChildObject: MyHelloObject
func name() -> String
"You"
MyHelloObject().printSomething()
MyHelloChildObject().printSomething()
这将打印:
Hello someone
Hello someone
但我想重写该方法以便打印:
Hello someone
Hello You
是否可以覆盖在扩展中实现的方法?
【问题讨论】:
你有什么问题? @koen 我真的不知道如何重新措辞,但我希望MyHelloChildObject
覆盖协议中声明的名称函数SayHelloProtocol
【参考方案1】:
如果您将name()
函数也添加到MyHelloObject
,它就会起作用:
class MyHelloObject: Object, SayHelloProtocol
override func printSomething()
hello()
func name() -> String
"Someone"
class MyHelloChildObject: MyHelloObject
override func name() -> String
"You"
【讨论】:
感谢您的回答。即使这可行,它也不方便,因为它意味着将扩展中实现的方法复制粘贴到我的代码中。它复制代码并且不保证双方都会应用更改。我想找到更好的方法 @Xys 我认为这是不可能的。此页面可能有一些可能的解决方法:team.goodeggs.com/…以上是关于使用 Swift 协议和扩展覆盖对象方法的主要内容,如果未能解决你的问题,请参考以下文章