[英]Swift protocol specializing generic protocol
是否有可能拥有专门用于通用协议的协议? 我想要这样的东西:
protocol Protocol: RawRepresentable {
typealias RawValue = Int
...
}
这确实可以编译,但是当我尝试从Protocol实例访问init
或rawValue
,其类型为RawValue
而不是Int
。
在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 { }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.