2016-07-21 6 views
1

Ich bin neu zu schnell, also bitte behandeln Sie mich als Anfänger.
Ich folge tutorial, das ist ziemlich altes Tutorial und es hat GoogleMap-Framework verwendet, während ich es mit Pod tun. In func geocodeAddress in MapTasks.swift Datei namens ich Fehler immerZusätzliches Argument 'Fehler' im Ruf in swift

Extra-Argument 'Fehler' in Call

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) 
    } 
} 

Bisher weiß ich, das ich diese Störung erhalte wegen der diffrent-Version schnell. Tutorial verfolge ich in alte Version des schnellen geschrieben und ich tue es in neuen

enter image description here

+0

Sie nicht die Variable 'Fehler' mit dem Verfahren assoziiert werden. Sie deklarieren einfach die Variable in der Methode. Es wird nicht funktionieren. Versuchen Sie, die Zeile "var error?" Zu entfernen. Wenn es nicht funktioniert und Sie mit Swift 2.0 arbeiten, müssen Sie die do-try-catch-Methode für NSJSONSerialization verwenden. –

Antwort

2

In Swift 2.0, Sie können nicht hinzufügen ‚Fehler‘ Argument in NSJSONSerialization Methode, müssen Sie versuchen-catch-Anweisung verwenden, wie folgt:

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

Ich kann Ihrem Vorschlag nicht folgen. Welchen Teil von Mein Code sollte ich mit Ihrem Code ändern, damit er funktioniert? Entschuldigung, aber ich bin Anfänger zu Swift. – ctpanchal

+0

"var error?" Entfernen Zeile und entfernen Sie auch "Let dictionary ...." -Methode und ersetzen Sie sie durch den Code, den ich angegeben habe. –

+0

Wenn ich das versuche, gibt es mir viele andere Fehler – ctpanchal

Verwandte Themen