Swift:如何在异步urlsession函数中返回值?

如您所见,我正在接收一个JSON文件,使用SwiftyJSON对其进行解析,并尝试返回totalTime,但是它不允许我这样做。我该怎么做呢?


func googleDuration(origin: String, destination: String) -> Int{

    // do calculations origin and destiantion with google distance matrix api


    let originFix = origin.stringByReplacingOccurrencesOfString(" ", withString: "+", options: NSStringCompareOptions.LiteralSearch, range: nil);

    let destinationFix = destination.stringByReplacingOccurrencesOfString(" ", withString: "+", options: NSStringCompareOptions.LiteralSearch, range: nil);


    let urlAsString = "https://maps.googleapis.com/maps/api/distancematrix/json?origins="+originFix+"&destinations="+destinationFix;

    println(urlAsString);


    let url = NSURL(string: urlAsString)!

    let urlSession = NSURLSession.sharedSession()


    let task = urlSession.dataTaskWithURL(url, completionHandler: {data, response, error -> Void in

        if error != nil {

            // If there is an error in the web request, print it to the console

            println(error.localizedDescription)

        }


        println("parsing JSON");

        let json = JSON(data: data);

        if (json["status"].stringValue == "OK") {

            if let totalTime = json["rows"][0]["elements"][0]["duration"]["value"].integerValue {

                println(totalTime);

            }

        }

    })

    task.resume();

}


慕田峪9158850
浏览 665回答 3
3回答

翻翻过去那场雪

另一个例子:func getJason(url: NSURL, completionHandler: (String?, NSError?) -> Void ) -> NSURLSessionTask {    var finalData: String!    let task = NSURLSession.sharedSession().dataTaskWithURL(url) { (data, response, error) -> Void in        if error != nil{            completionHandler(nil, error)            return        }        else{        if let urlContent = data{            do{                let jsonData = try NSJSONSerialization.JSONObjectWithData(urlContent, options: NSJSONReadingOptions.MutableContainers)                if let ip = jsonData["ip"]{                    finalData = ip as? String                    completionHandler(finalData, nil)                    return                }            }catch{                print("EMPTY")            }        }    }}    task.resume()    return task}然后我在viewDidLoad中调用了它getJason(url) { (ipAddress, error) -> Void in        if error != nil{            print(error)        }        else{            if let ip = ipAddress{          //To get rid of optional        self.ipLabelDisplay.text = "Your Ip Address is: \(ip)"            }        }    }
打开App,查看更多内容
随时随地看视频慕课网APP