Swift协议中如何为方法添加带初始代码的默认实现?
为Swift协议方法添加默认初始实现
可以实现这个需求,只需在ImportProtocol的扩展中为importDIM提供默认实现即可。遵循该协议的类若不手动实现此方法,会自动使用指定的初始内容;若需扩展逻辑,也可在类的实现中调用默认实现。
修改后的协议扩展代码
extension ImportProtocol { // 其他方法的默认实现... func importDIM() { let dim = addDIM() // Stage 1 } }
用法说明
直接使用默认实现:遵循协议的类无需手动编写
importDIM方法,会自动继承扩展中的默认实现:class ImportHandler: ImportProtocol { var moc: NSManagedObjectContext required init(viewContext: NSManagedObjectContext) { self.moc = viewContext } // 无需编写importDIM,自动使用扩展中的默认实现 func addDIM() -> DIMType { // 假设已定义DIMType类型 // 你的addDIM实现逻辑 } }扩展默认实现:如果需要在默认逻辑基础上添加自定义代码,可在类的
importDIM实现中调用协议扩展的默认方法:class CustomImportHandler: ImportProtocol { var moc: NSManagedObjectContext required init(viewContext: NSManagedObjectContext) { self.moc = viewContext } func addDIM() -> DIMType { // 自定义addDIM逻辑 } func importDIM() { // 先调用默认实现 (self as ImportProtocol).importDIM() // 添加自定义后续逻辑 // Stage 2 } }
注意:addDIM方法需要在协议中定义(或在扩展中提供默认实现),否则遵循协议的类必须实现它,否则会编译报错。如果addDIM是所有遵循协议的类都需要的方法,建议将其加入ImportProtocol的定义:
protocol ImportProtocol { var moc : NSManagedObjectContext { get set } init(viewContext: NSManagedObjectContext) func addDIM() -> DIMType // 假设返回类型为DIMType func importDIM() }
内容的提问来源于stack exchange,提问作者Ceri Turner
相关产品推荐
相关产品推荐

