2016-07-21 21 views
1

Я новичок в быстром, поэтому, пожалуйста, обращайтесь со мной как с новичком.
Я следую tutorial, это довольно старый учебник, и он использовал структуру GoogleMap, тогда как я делаю это с помощью pod. В func geocodeAddress в MapTasks.swift файле я получаю сообщение об ошибке с именемДополнительный аргумент 'error' in call in 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) 
    } 
} 

До сих пор я знаю, я получаю эту ошибку из-за diffrent версии стрижа. Учебник Я выполняю написано в старой версии быстра, и я делаю это в новом

enter image description here

+0

вы не привязывают 'ошибки' переменной с помощью метода. Вы просто объявляете переменную внутри метода. Это не сработает. Попробуйте удалить строку «var error?». Если он не работает, и вы выполняете qorking с Swift 2.0, вам нужно будет использовать метод try-try-catch для NSJSONSerialization. –

ответ

2

В Swift 2.0, вы не можете добавить аргумент «ошибка» в методе NSJSONSerialization, вам нужно использовать примерочные поймать заявление следующим образом:

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?" line, а также удалите метод «let dictionary ...» и замените его кодом, который я дал. –

+0

Когда я пытаюсь это сделать, это дает мне много других ошибок – ctpanchal

Смежные вопросы