簡體   English   中英

無法獲取我的信息數據任務swift 3

[英]Having trouble getting my info out datatask swift 3

我有這個功能,我想用locationTask函數中的緯度/經度數據填充位置數組。

問題是數據只在數據任務函數中可用,在它之外,它就會消失。

func getFromDatabase()
{
    var locations: [CLLocationCoordinate2D] = []
    let url = URL(string: URL_DATABASESend)

    let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in
        //Here I print the JSON: print(NSString(data: data!, encoding: String.Encoding.utf8.rawValue)!)
        do{
            if(data != nil){
               let parsedData = try? JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! [[String:String]]
                    for dic in parsedData! {
                    if let lat = Double(dic["latitude"]!), let long = Double(dic["longitude"]!) {
                        //print(lat)
                        //print(long)
                        var coordinatesToAppend = CLLocationCoordinate2D(latitude: lat, longitude: long)
                        locations.append(coordinatesToAppend)
                    }
                }
            }} catch let error as NSError{
            print(error.localizedDescription)
            return
        }
    }
    task.resume()
}

我不知道如何使用完成處理程序,當我這樣做時,我會遇到很多錯誤(我遵循了很多教程/在線幫助主題)。

有誰知道如何從函數中獲取信息?(無法返回值因為我正在使用數據任務)我讀了很多主題,但沒有一個解決了我的問題。

希望聽到你們的一些消息!

您需要使用回調來從關閉中獲取內容。

你的內容是這個數組: var locations: [CLLocationCoordinate2D]所以我們將使用像這樣的回調:

completion: @escaping ([CLLocationCoordinate2D])->()

我們將它添加到方法簽名中:

func getFromDatabase(completion: @escaping ([CLLocationCoordinate2D])->())

然后我們在內容就緒的代碼中使用它,就在循環之后:

func getFromDatabase(completion: @escaping ([CLLocationCoordinate2D])->())
{
    var locations: [CLLocationCoordinate2D] = []
    let url = URL(string: URL_DATABASESend)

    let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in
        do {
            if data != nil {
                let parsedData = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! [[String:String]]
                for dic in parsedData {
                    if let lat = Double(dic["latitude"]!), let long = Double(dic["longitude"]!) {
                        let coordinatesToAppend = CLLocationCoordinate2D(latitude: lat, longitude: long)
                        locations.append(coordinatesToAppend)
                    }
                }
                // Here the array is ready, we use the completion handler
                completion(locations)
            }
        } catch let error as NSError {
            print(error.localizedDescription)
            return
        }
    }
    task.resume()
}

然后用這樣的尾隨閉包調用你的方法來取回數組:

getFromDatabase { (locs) in
    // Here "locs" is your [CLLocationCoordinate2D] array
    print(locs)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM