2015-12-03 183 views
0

默認實現協議的是我的代碼:,枚舉

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

嘗試'自== Error'在協議擴展 – Roshan

+0

@Roshan它給'相同類型的要求使得泛型參數「自我」非generic' – katleta3000

+0

呀,還挺有預感這是行不通的。 ..如果你需要實現特定類型的協議,你可以在類型本身而不是協議上添加擴展... – Roshan

回答

3

如果你想實現LogableError你並不需要一個協議擴展,你只需要在一個擴展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)") 
     } 
    } 
}