Я пытаюсь ограничить расширение протокола классом c. Моя цель - предоставить реализацию протокола по умолчанию, где Self - это любой экземпляр, который является подклассом некоторого обобщенного c класса. Рассмотрим приведенный ниже пример:
protocol Printable {
var value: String { get }
}
class Printer<P: Printable> {
let printable: P
init(printable: P) {
self.printable = printable
}
}
protocol Press {
func print()
}
// error: reference to generic type 'Printer' requires arguments in <...>
extension Press where Self: Printer {
func print() {
// Do Something with self.printable.value
}
}
Компилятор выдает ошибку error: reference to generic type 'Printer' requires arguments in <...>
. Я не понимаю, почему это нельзя допустить. Пока Press
это какой-то Printer
, который всегда работает с какими-то Printable
, вещи должны работать, верно? Или я что-то упускаю?
Можете ли вы указать, что может быть правильным способом достижения чего-то подобного?