2016-05-29 13 views
-2

私はウェブサービスを迅速にやっています。私はalamofireを使用しています。コードが動作しているが、私はそれが "可読"ではない(クリーンなコードではない)と思う。私はこれをどのように最適化できるか考えていますか? LET文はerrorと上記dataのように、コンマと一緒に連鎖させることができれば感謝テストを受け入れるとネストされたものを避ける

static func checkBookValidity(serialNumber: String, callBack: Result<Bool?> ->()) { 

     let router = Router.CheckBookLuggage(serialNumber: serialNumber) 
     let request = Alamofire.request(router) 
     request.validate() 
     request.response { (request, response, data, error) in 
     if let error = error { 
      if error.code == NSURLErrorNotConnectedToInternet { 
       callBack(.Failure(.NoConnection)) 
      } 
      else { 
       if let data = data { 
        do 
        { 
        if let json = try NSJSONSerialization.JSONObjectWithData(data, options: .AllowFragments) as? [String : AnyObject] { 
         let erroType = WSError.errorTypeWithJson(json, httpErroCode: error.code) 
         callBack(.Failure(erroType)) 
        } 
        } catch { 
        callBack(.Failure(.ServerError)) 
        } 
       } 
       else { 
        callBack(.Failure(.ServerError)) 
       } 
      } 
     } 
     else { 
      if let data = data { 
       do 
       { 
        if let json = try NSJSONSerialization.JSONObjectWithData(data, options: .AllowFragments) as? [String : AnyObject] { 
        if let resultDic = json["result"] as? [String:AnyObject], let exists = resultDic["exists"] as? Bool { 
         if exists { 
          if let owner = resultDic["email"] as? String { 
           // ... 
          } 
         } 
         else { 
          callBack(.Success(false)) 
         } 
        } 
        } 
       } catch { 
        callBack(.Failure(.ServerError)) 

       } 
      } 
     } 
     } 
    } 
+1

['guard'ステートメント](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Statements.html#//apple_ref/doc/uid/TP40014097)を見てください。 -CH33-ID434);) – Hamish

+2

あなたはおそらくhttp://codereview.stackexchange.com/ – kye

+0

でこの質問をするべきです。ありがとう、私はガードステートメントを知っている:)。オプションのバインディングと呼び出し関数を組み合わせてガードを使用できるかどうか考えていますか? (私の例を参照してjsonの解析と "データ"のバインドを試みる) – samir

答えて

2

この

if let error = error, data = data { 
    do { 
     if let json = try NSJSONSerialization.JSONObjectWithData(data, options: .AllowFragments) as? [String : AnyObject] { 
      let erroType = WSError.errorTypeWithJson(json, httpErroCode: error.code) 
      callBack(.Failure(erroType)) 
.... 
.... 

を試してみてください。 ガードでも同じことができます。

関連する問題