2016-05-12 9 views
0

私はAPIコールを作成するAPIクラスを持っており、ほとんどの呼び出しは同じですが、いくつかは何かを返すものです(JSONデータなど)。また、paramが登録されているかどうかをチェックする呼び出しがあり、trueまたはfalseを返します。だから、今のところ、3つのAPIコールがありますが、まったく同じコードですが、違いや戻り値はほとんどありません。異なる戻り値の型で複数回同じメソッドを書く必要があるときは、同じメソッドを2回書くのがベストプラクティスですか?

これらの2つの例で、最初のものは、第二は、真または偽を返し、JSONデータと内部クラスのプロパティを設定します:

///Call an api with the given url param 
private func call(){ 
    let request = NSMutableURLRequest(URL: NSURL(string: userApiCallUrl)!) 
    request.HTTPMethod = "POST" 

    request.HTTPBody = postParam.dataUsingEncoding(NSUTF8StringEncoding) 
    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in 
     guard error == nil && data != nil else { 
      // check for fundamental networking error 
      print("error=\(error)") 
      return 
     } 
     if let httpStatus = response as? NSHTTPURLResponse where httpStatus.statusCode != 200 { 
      // check for http errors 
      print("statusCode should be 200, but is \(httpStatus.statusCode)") 
      print("response = \(response)") 
     } 

     let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding) 

     self.setJsonData(responseString!) 
    } 
    task.resume() 
} 
///Call to check if UDID exist. Returns true or false. For the moment returns true allways 
private func callToCheck()->Bool{ 
    let request = NSMutableURLRequest(URL: NSURL(string: userApiCallUrl)!) 
    request.HTTPMethod = "POST" 

    request.HTTPBody = postParam.dataUsingEncoding(NSUTF8StringEncoding) 
    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in 
     guard error == nil && data != nil else { 
      // check for fundamental networking error 
      print("error=\(error)") 
      return    } 
     if let httpStatus = response as? NSHTTPURLResponse where httpStatus.statusCode != 200 { 
      // check for http errors 
      print("statusCode should be 200, but is \(httpStatus.statusCode)") 
      print("response = \(response)") 
     } 

     let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding) 
     print("responseString = \(responseString)") 
    } 
    task.resume() 
    return true 
} 

コードがほぼ同じです。私の質問は、これを行うベストプラクティスは何ですか? 私が知る限り、重複コードは最善のことではありません。しかし、今私は明らかに別の方法を見ていない。

+0

戻り値の型を汎用にします。 [AnyObjectまたはAny]のように(http://stackoverflow.com/questions/25809168/anyobject-and-any-in-swift) – NSNoob

+0

メソッドが同じだが、戻り値の型が異なる場合は、 "Object"を返し、そのオブジェクトインスタンス内の目的のクラスのインスタンス – Abhishek

答えて

0

functionをコールしてint型を呼び出すときに、余分な引数を使用します。次に、intを切り替えます(case1はいくつかのデータを返し、case2は他の種類のデータを返します)。一般的な助言として。あなたの最後の関数でNSMutableDictionaryを使い、キーの値として初期intを代入し、結果の値を持つ他のキーとしてそれぞれの場合の結果を代入します。結局のところ、あなたは あなたが治療し、どのデータを使用するコールバック魔法のケースで知られています。

0

あなたは本当に、二つの機能をしたい

private func call(){ 
    callToCheck() 
} 

に最初のものを変更し、私は1つ、「リターン」は「falseを返す」であるべきと仮定した場合。

関連する問題