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

DRY code: how to call an implementation from another protocol

我有一些代码想干掉,我不想 repeat/maintain 在多个地方使用相同的代码。

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" }
}