DRY代码:如何从另一个协议调用实现



我有一些代码要DRY up,我不想在多个地方重复/维护相同的代码。

protocol Programable {
var log: String { get }
}
protocol Convertable {
var status: String { get set }
}
extension Programable where Self: NSManagedObject {
var log: String {
return <managed object related stuff>
}
}
extension Programable where Self: NSManagedObject, Self: Convertable {
var log: String {
return <managed object related stuff> + status
}
}

如何在第二个扩展中调用第一个扩展的log,这样就不必重复代码中的细节了?

如果只有约束不同,就不可能调用相同的重载。相反,将公共性转移到一些私人的东西中。对此没有命名约定。

extension Programmable where Self: AnyObject {
var log: String { where_Self_is_AnyObject_log }
private var where_Self_is_AnyObject_log: String { "where Self: AnyObject" }
}
extension Programmable where Self: AnyObject & Convertible {
var log: String { "(where_Self_is_AnyObject_log) & Convertible" }
}

最新更新