快速的协议属性默认默认实现

时间:2020-04-11 20:40:28

标签: ios swift protocols swift-protocols protocol-oriented

我知道您可以使用协议扩展名提供默认值

protocol SomeProtocol {
    var prop: String { get }
}

extension SomeProtocol {
    var prop: String {
        return "defaultValue"
    }
}

struct SomeA: SomeProtocol {}
struct SomeB: SomeProtocol {}

let a = SomeA()
let b = SomeB()

debugPrint(a.prop) // prints defaultValue
debugPrint(b.prop) // prints defaultValue

但是有没有办法为这样的协议的不同实现提供不同的默认值,而无需为符合该协议的每个类或结构实现属性?

debugPrint(a.prop) // prints defaultValue
debugPrint(b.prop) // prints differentDefaultValue

或执行类似操作的类似模式?

1 个答案:

答案 0 :(得分:1)

协议继承。

protocol ?: SomeProtocol { }

extension ? {
  var prop: String { "?" }
}

struct SomeA: SomeProtocol { }
struct SomeB: ? { }
struct SomeC: ? { }

SomeA().prop // "defaultValue"
SomeB().prop // "?"
SomeC().prop // "?"