Быстрые различные реализации по умолчанию для свойства протокола - PullRequest
0 голосов
/ 11 апреля 2020

Я знаю, что вы можете задать значение по умолчанию с таким расширением протокола, как это

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 Ответ

1 голос
/ 11 апреля 2020

Протокол наследования.

protocol ?: SomeProtocol { }

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

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

SomeA().prop // "defaultValue"
SomeB().prop // "?"
SomeC().prop // "?"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...