[英]Swift Protocol as a Type
我正在尝试使用Swift协议作为类型。 我有以下代码:
protocol STCMultipeerProtocol {
typealias ErrorBlock = (NSError?)->();
func start();
func stop();
func retryConnecting();
func disconnect();
}
class STCConnectivityManager: NSObject {
typealias VoidBlock = ()->();
private var roleManager: STCMultipeerProtocol?
private var completionBlock: VoidBlock?
....
}
现在,问题是编译器给我错误:
Protocol 'STCMultipeerProtocol' can only be used as a generic constraint because it has Self or associated type requirements.
我看到很多其他人都看到了此错误,但是我无法理解此问题的正确原因和解决方案。
如果有人可以帮助我解决问题,我将不胜感激
当在协议内部使用类型typealias
,它称为协议关联类型声明 ,并且与“符合协议的最终类型”(也称为Self
关联。 在核心Swift库中,您会经常看到诸如Sequences或basic类型之类的内容。 编译器需要该Self信息来完成其工作,因此会失败。
好消息是,您不需要协议中的类型别名,而可以将其作为名称空间中的全局定义移出:
typealias ErrorBlock = (NSError?)->();
protocol STCMultipeerProtocol {
func start();
func stop();
func retryConnecting();
func disconnect();
}
如果您有很多错误类型,则可以将其称为MultipeerErrorBlock
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.