2016-07-21 6 views
1

私は初心者として私を治療してください速く新しいです。
私はtutorialに従っています。これはかなり古いチュートリアルで、私はポッドでやっていますが、GoogleMapフレームワークを使っています。 func geocodeAddressMapTasks.swiftファイルに私は理由SWIFTの切り抜いたバージョンのこのエラーを取得していますです即時の呼び出しで余分な引数 'エラー'

func geocodeAddress(address: String!, withCompletionHandler completionHandler: ((status: String, success: Bool) -> Void)) { 
    if let lookupAddress = address { 
     var geocodeURLString = baseURLGeocode + "address=" + lookupAddress 
     geocodeURLString = geocodeURLString.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)! 

     let geocodeURL = NSURL(string: geocodeURLString) 

     dispatch_async(dispatch_get_main_queue(), {() -> Void in 
      let geocodingResultsData = NSData(contentsOfURL: geocodeURL!) 

      let request = NSMutableURLRequest(URL: geocodingResultsData) 

      let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { 
       (let data, let response, let error) in 

       if let _ = response as? NSHTTPURLResponse { 
        do { 
         let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as? NSDictionary 

         if error != nil { 
          print("error=\(error!)") 
          return 
         } 

         if let parseJSON = json { 


         } 
        } catch { 
         print(error) 
        } 
       } 
      } 
      task.resume() 
      else { 
       // Get the response status. 
       let status = dictionary["status"] as! String 

       if status == "OK" { 
        let allResults = dictionary["results"] as! Array<Dictionary<NSObject, AnyObject>> 
        self.lookupAddressResults = allResults[0] 

        // Keep the most important values. 
        self.fetchedFormattedAddress = self.lookupAddressResults["formatted_address"] as! String 
        let geometry = self.lookupAddressResults["geometry"] as! Dictionary<NSObject, AnyObject> 
        self.fetchedAddressLongitude = ((geometry["location"] as! Dictionary<NSObject, AnyObject>)["lng"] as! NSNumber).doubleValue 
        self.fetchedAddressLatitude = ((geometry["location"] as! Dictionary<NSObject, AnyObject>)["lat"] as! NSNumber).doubleValue 

        completionHandler(status: status, success: true) 
       } 
       else { 
        completionHandler(status: status, success: false) 
       } 
      } 
     }) 
    } 
    else { 
     completionHandler(status: "No valid address.", success: false) 
    } 
} 

は、これまでのところ、私が知っているコールに

エクストラ引数「エラー」と呼ばれるエラーを取得しています。私は、次の午前チュートリアルはSWIFTの古いバージョンで書かれていると私は新しい

スウィフト2.0では

enter image description here

+0

。メソッド内で変数を宣言するだけです。それは動作しません。 "var error?"という行を削除してみてください。それがうまく動作せず、Swift 2.0でqorkingしている場合は、NSJSONSerializationでdo-try-catchメソッドを使用する必要があります。 –

答えて

2

でそれをやっている、あなたはNSJSONSerializationメソッドに「エラー」引数を追加することはできません、あなたは、try-catchステートメントを使用する必要があります次のように:

func geocodeAddress(address: String!, withCompletionHandler completionHandler: ((status: String, success: Bool) -> Void)) { 

if let lookupAddress = address { 
    var geocodeURLString = baseURLGeocode + "address=" + lookupAddress 
    geocodeURLString = geocodeURLString.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)! 

    let geocodeURL = NSURL(string: geocodeURLString) 

    dispatch_async(dispatch_get_main_queue(), {() -> Void in 
     let geocodingResultsData = NSData(contentsOfURL: geocodeURL!) 

     let request = NSMutableURLRequest(URL: geocodeURL!) 

     let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { 
      (let data, let response, let error) in 

      if let _ = response as? NSHTTPURLResponse { 
       do { 
        let dictionary = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as? NSDictionary 

        if error != nil { 
         print("error=\(error!)") 
         return 
        } 

        if let parseJSON = dictionary { 
         let status = dictionary["status"] as! String 

         if status == "OK" { 
          let allResults = dictionary["results"] as! Array<Dictionary<NSObject, AnyObject>> 
          self.lookupAddressResults = allResults[0] 

          // Keep the most important values. 
          self.fetchedFormattedAddress = self.lookupAddressResults["formatted_address"] as! String 
          let geometry = self.lookupAddressResults["geometry"] as! Dictionary<NSObject, AnyObject> 
          self.fetchedAddressLongitude = ((geometry["location"] as! Dictionary<NSObject, AnyObject>)["lng"] as! NSNumber).doubleValue 
          self.fetchedAddressLatitude = ((geometry["location"] as! Dictionary<NSObject, AnyObject>)["lat"] as! NSNumber).doubleValue 

          completionHandler(status: status, success: true) 
         } 
         else { 
          completionHandler(status: status, success: false) 
         } 

        } 
       } catch { 
        print(error) 
       } 
      } 
     } 
      task.resume() 
     }) 
     } 

}あなたが方法では、変数 'エラー' を関連付けされていません

+0

私はあなたの提案に従うことができません。私のコードのどの部分をコードで変更して動作させるべきですか?申し訳ありませんが、私は初心者です。 – ctpanchal

+0

「var error?」を削除します。また、 "let dictionary ...."メソッドを削除し、私が与えたコードに置き換えてください。 –

+0

私はそれを試しているときに、それは私に多くの他のエラーを与える – ctpanchal

関連する問題