繁体   English   中英

Swift协议作为一种类型

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM