繁体   English   中英

专门用于通用协议的Swift协议

[英]Swift protocol specializing generic protocol

是否有可能拥有专门用于通用协议的协议? 我想要这样的东西:

protocol Protocol: RawRepresentable {
  typealias RawValue = Int
  ...
}

这确实可以编译,但是当我尝试从Protocol实例访问initrawValue ,其类型为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.

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