在
Swift中实现协议一致性时我有两个选择,结果相同:
>在类中实现协议 – 即在类定义顶部声明一致性,并将实现放在类主体中,或者
>在扩展中实现协议 – 即完全在类外编写协议一致性.
这是一个例子:
public class MyClass : CustomDebugStringConvertible {
... // Something
public var debugDescription : String {
return "MyClass"
}
}
与
class MyClass {
... // Something
}
extension MyClass : CustomDebugStringConvertible {
public var debugDescription: String {
return "MyClass"
}
}
Swift书中的代码示例倾向于集中于第一种方法; Apple’s source code of Swift core显示他们只使用第二种方法(例如,参见Bool和Optional).
是否有一种合理的方法可以根据情况决定两种方法,还是仅仅是编码偏好的问题?
这更像是编码偏好和可读性的问题.如果你认为你的课程会变得很庞大,那么在扩展中实现它可能更有意义,这样它的方法就不会给你的类增加混乱.如果它是一个短类,我会说一个,因为可读性受影响较小.