我希望我的一些类(不是全部)使用docs中的'Class-Only Protocols'来保持一致。
protocol RefreshData: class, ClassA, ClassB
{
func updateController()
}
我得到的错误
non class type 'RefreshData cannot inherit from classA
non class type 'RefreshData cannot inherit from classB
我不确定我是不是完全按照文件上说的去做。有人对此有什么想法吗?
4条答案
按热度按时间wixjitnu1#
Swift 4允许您合并类型,因此您可以拥有自己的协议,然后创建,例如,一个类型别名,将其与特定的类需求组合在一起。
举个(人为的)例子:
对于提供的代码:
问题是你试图限制到特定的类,而Swift不能这样做(至少目前是这样)。你只能限制到类,并从其他协议继承。你的语法是用于协议继承的,但你试图将其用作类限制。
请注意,类协议的用途是:
当通信协定需求所定义的行为假设或要求相容型别具有指涉语意(Semantics)而非值语意时,请使用仅限类别的通信协定。
e0bqpujr2#
定义协议
必须区分声明
protocol
的概念(可用于类)定义类
...从使类符合协议的概念
符合您不拥有的类
有时候你想让一个类符合一个协议,但是你并不拥有这个类的源代码。
ctrmrzij3#
最新版本的Swift可以做到!我会做一个协议和协议扩展,目标类你想要的!(约束扩展到特定的类)
bqucvtff4#