在Swift中实现协议一致性时我有两个选择,结果相同:
以下是一个例子:
public class MyClass : CustomDebugStringConvertible {
... // Something
public var debugDescription : String {
return "MyClass"
}
}
VS
class MyClass {
... // Something
}
extension MyClass : CustomDebugStringConvertible {
public var debugDescription: String {
return "MyClass"
}
}
Swift书中的代码示例倾向于专注于第一种方法; Apple's source code of Swift core表明他们只使用第二种方法(例如,请参阅Bool
和Optional
)。
根据具体情况,是否有合理的方法来决定两种方法,还是仅仅是编码偏好的问题?
答案 0 :(得分:4)
更重要的是编码偏好和可读性。如果你认为你的课程会变得很庞大,那么在扩展中实现它可能更有意义,这样它的方法就不会给你的类增加混乱。如果它是一个短类,我会说一个,因为可读性受影响较小。
答案 1 :(得分:4)
我认为它主要是编码偏好。在我的团队中,我们已经开始采用第二种方法。起初我认为这是一个奇怪的扩展使用,但我已经喜欢它了。它将协议的实现方法很好地保存在一起,给人的印象是类本身更小(实际上只是光学)。如果类有一个tableview并且你使用扩展来实现数据源和委托,我可以看到一些混乱或混淆的机会。如果有人然后对该类进行子类化,他们可能不会意识到扩展并看到意外行为。