gpt4 book ai didi

ios - 如何创建具有符合通用协议(protocol)的弱委托(delegate)的基类?

转载 作者:可可西里 更新时间:2023-11-01 00:31:34 25 4
gpt4 key购买 nike

我想为 UIView 创建一个基类,它要求委托(delegate)符合 View 定义的特定协议(protocol)。

class BaseView<P>: UIView {
weak var delegate: P?
}

protocol MyProtocol {}

class MyView: BaseView<MyProtocol> {}

这给了我错误:“‘weak’不得应用于非类绑定(bind)的‘T’;考虑添加具有类绑定(bind)的协议(protocol)一致性”。

如何修复此错误?或者有一些解决方法吗?还是一开始就没有必要让委托(delegate)变量变弱?提前致谢。

最佳答案

由于 weak 是分配给任何类类型而非结构类型的属性,因此您必须明确地将泛型参数限制为类类型,并且您可以这样做:

class BaseView<P: AnyObject>: UIView {
weak var delegate: P?
}

@objc protocol MyProtocol {

}

class MyView: BaseView<MyProtocol> {

}

只有一个需要澄清。通常要使协议(protocol)成为类类型,通常您会以这种方式使其符合类:

protocol MyProtocol: class { }

但是,出于某种原因,如果您这样做,编译器会抛出错误。我了解到这是一个可以在此处了解更多信息的错误:

How to require that a protocol can only be adopted by a specific class

因此添加 @objc 有助于消除警告和错误。

关于ios - 如何创建具有符合通用协议(protocol)的弱委托(delegate)的基类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50550228/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com