Swift协议专用通用协议
问题描述:
是否有可能有专门的通用协议的协议?我想是这样的:Swift协议专用通用协议
protocol Protocol: RawRepresentable {
typealias RawValue = Int
...
}
这并不编译,但是当我尝试从一个协议实例访问init
或rawValue
,其型号为RawValue
,而不是Int
。
答
在斯威夫特4,你可以添加约束到您的协议:
protocol MyProtocol: RawRepresentable where RawValue == Int {
}
而现在MyProtocol定义的所有方法都会有一个Int rawValue。例如:是采用RawRepresentable
extension MyProtocol {
var asInt: Int {
return rawValue
}
}
enum Number: Int, MyProtocol {
case zero
case one
case two
}
print(Number.one.asInt)
// prints 1
类型,但其RawValue不诚信不能采纳你的约束协议:
enum Names: String {
case arthur
case barbara
case craig
}
// Compiler error
extension Names : MyProtocol { }
你想创建一个协议,这是只适用于枚举与'诠释'原始价值? –
你不能为你的协议找到一个更好的名字吗? –