swift

时间:2016-07-21 04:44:38

标签: swift xcode google-maps

我是新手,所以请把我当作初学者 我关注tutorial,这是非常古老的教程,它使用了GoogleMap框架,而我正在使用pod。在func geocodeAddress MapTasks.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的不同版本,我收到此错误。我正在关注的教程是用旧版本的swift编写的,我在新的

中编写

enter image description here

1 个答案:

答案 0 :(得分:2)

在Swift 2.0中,您无法添加错误&#39;在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()
        })
        }

}