是否可以拥有专门用于通用协议的协议?我想要这样的东西:
protocol Protocol: RawRepresentable {
typealias RawValue = Int
...
}
这会编译,但当我尝试从协议实例访问init
或rawValue
时,其类型为RawValue
而不是Int
。
答案 0 :(得分:2)
在Swift 4中,您可以为协议添加约束:
protocol MyProtocol: RawRepresentable where RawValue == Int {
}
现在,MyProtocol上定义的所有方法都将具有Int rawValue。例如:
extension MyProtocol {
var asInt: Int {
return rawValue
}
}
enum Number: Int, MyProtocol {
case zero
case one
case two
}
print(Number.one.asInt)
// prints 1
采用RawRepresentable但其RawValue不是Int的类型不能采用您的约束协议:
enum Names: String {
case arthur
case barbara
case craig
}
// Compiler error
extension Names : MyProtocol { }