这是我的代码:
protocol Logable {
func log()
}
extension Logable where Self: Error {
func log() {
switch self {
case .Server(code: Int, message: String):
print("code = \(code), message = \(message)")
}
}
}
enum Error: Logable {
case Client(code: Int, message: String)
case Server(code: Int, message: String)
}
如您所见,我想为我的枚举LogableError
创建协议Error
的默认实现。也许它不可能 - 请提供链接。不要在操场上运行它,它不会显示任何内容,但编译器会给出错误:
type 'Self' constrained to non-protocol type 'Error'
答案 0 :(得分:3)
如果您想为Logable
实施Error
,则不需要协议扩展,只需要Error
上的扩展名。
protocol Logable {
func logError()
}
enum Error {
case Client(code: Int, message: String)
case Server(code: Int, message: String)
}
extension Error : Logable {
func logError() {
switch self {
case .Client(let code, let message):
print("code = \(code), message = \(message)")
case .Server(let code, let message):
print("code = \(code), message = \(message)")
}
}
}