0

我知道你可以给一个像这样的协议扩展的默认值

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

或一些类似的模式来做这样的事情?

4

1 回答 1

1

协议继承。

protocol : SomeProtocol { }

extension  {
  var prop: String { "" }
}

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

SomeA().prop // "defaultValue"
SomeB().prop // ""
SomeC().prop // ""
于 2020-04-11T20:46:07.963 回答