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" }
}
我有一些代码想干掉,我不想 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" }
}