Так как слабое - это свойство, назначаемое всему, что имеет тип класса, а не структуру, вы должны явно ограничить свой универсальный параметр типом класса, и вы делаете это следующим образом:
class BaseView<P: AnyObject>: UIView {
weak var delegate: P?
}
@objc protocol MyProtocol {
}
class MyView: BaseView<MyProtocol> {
}
Толькоодно уточнение.Обычно для того, чтобы протокол был типом класса, обычно вы должны привести его в соответствие с классом следующим образом:
protocol MyProtocol: class { }
Однако по какой-то причине компилятор выдает ошибку, если вы сделаете это таким образом.Я узнал, что об этой ошибке можно узнать подробнее здесь:
Как потребовать, чтобы протокол мог быть принят только конкретным классом
Поэтому добавление@objc
помогает заставить замолчать как предупреждение, так и ошибку.