Я хотел бы иметь реализацию по умолчанию Comparable
для протокола, который я объявляю. Ниже дает ошибку Extension of protocol 'Asset' can not have an inheritance clause
Расширение протокола, обеспечивающего соответствие по умолчанию протоколу «Сопоставимый»
protocol Asset {
func getPriority() -> AssetPriority
}
extension Asset: Comparable {
static func < (lhs: Asset, rhs: Asset) -> Bool {
return lhs.getPriority() < rhs.getPriority()
}
static func == (lhs: Asset, rhs: Asset) -> Bool {
return lhs.getPriority() == rhs.getPriority()
}
}
Я знаю, что я могу сделать наследование протокола (без расширения):
protocol Asset: Comparable {
func getPriority() -> AssetPriority
}
, но тогда я должен снова и снова выполнять одни и те же две функции.
Я не хочу, чтобы каждый актив, чтобы наследовать от общего базового класса (так что поражения цели протоколов ...)
Является ли расширение протокола протокола только пока не поддерживается в Swift 3 (как это для классов)?
@DudeOnRock компилируется нормально: http://swiftlang.ng.bluemix.net/#/repl/587abe5eaadcf805dca39a23 – Alexander
@DudeOnRock Но да, 'Asset' не может быть использован как его собственный тип больше, если вам наследовать от 'Equatable' или' Comparable'. Это неполный тип – Alexander
Извините, я слишком быстро оценил ваш ответ ... У меня вместо 'Self' для типов аргументов в расширении был' Asset' вместо 'Self'. Спасибо огромное! – DudeOnRock