2016-04-08 4 views
4

を一般的な列挙型の比較:は、私がどのように見える結果列挙し、エラーを持って、関連するタイプで

enum Result<T>: Equatable { 
    case Success(T) 
    case Error(ErrorType) 
} 

func ==<T>(lhs: Result<T>, rhs: Result<T>) -> Bool { 
    var equal: Bool = false 
    switch (lhs, rhs) { 
    case (.Success, .Success): 
    equal = true 
    case (.Error, .Error): 
    equal = true 
    default: 
    break 
    } 
    return equal 
} 

RequestErrorは、次のようになります。

enum RequestError: String, 
        ErrorType, 
        Equatable { 
    case NoInternet = "NO_INTERNET_ERROR" 
    case Unknown = "UNKNOWN_ERROR" 
    case ServerError = "SERVER_ERROR" 
} 

init?(_ error: NSError?) { 
    //do init 
} 

func ==(lhs: RequestError, rhs: RequestError) -> Bool { 
    return lhs.rawValue == rhs.rawValue 
} 

私はこのために、クイック+軽快でスペックを書いています:

class ResultSpec: QuickSpec { 
    override func spec() { 

    describe("Result") { 

     context("when comparing 2 success results") { 

     it("returns true") { 
      let equal = Result.Success(5) == Result.Success(5) 
      expect(equal).to(beTrue()) 
     } 

     } 

     context("when comparing 2 error results") { 

     it("returns true") { 
      let error = NSError(domain: "", code: 0, userInfo: nil) 
      let requestError = RequestError(error)! 
      let equal = Result.Error(requestError) == Result.Error(requestError) 
      expect(equal).to(beTrue()) 
     } 

     } 

    } 

    } 
} 

成功をチェックする最初のテストが合格しました。もう一つはエラーでコンパイルできません:私は信じている

let equal = Result.Error(requestError) == Result.Error(requestError) 

答えて

2

二項演算子「==」は2に適用することはできませんオペランドこの行の

「< _>を結果」コンパイラは、Generic Resultのenum ==演算を使用する型がわからないことを示します。この行は、タイプがここで何の役割も果たさないため、直接型指定で置き換えることができます。このように:

let equal = Result<String>.Error(requestError) == Result<String>.Error(requestError) 
関連する問題