簡體   English   中英

方法始終返回Nil

[英]Method Always Returning Nil

我正在嘗試從fitbit服務器獲取JSON數據並進行打印。 當我運行第一個函數時,我總是得到nil。 但是,當我運行第二個函數時,它將正確打印數據。 我猜測這與iPhone從服務器獲取JSON所花費的時間有關,但對於如何解決它完全一無所知。 我的最終目標是返回數據,但是我顯然不能從完成處理程序中返回數據。

static func getFitbitData(resource: ResourcePath, date: Date) -> Int? {
        var rawData: NSData?
        let request = oauth.request(forURL: NSURL(string: "https://api.fitbit.com/1/user/-/\(resource.rawValue)/date/\(date.toString())/1d.json")!)
        let task = oauth.session.dataTaskWithRequest(request) { data, response, error in
            if error != nil {
                print("[ERROR] An error occured during request: \(error)")
            }
            else {
                print("[SUCCESS] Data retrieved successfully")
                rawData = data!
            }
        }
        task.resume()
        return ParsingEngine.parseFitbitData(ResourcePath.calories, data: rawData!)
    }



static func getFitbitData(resource: ResourcePath, date: Date) -> Int? {
        let request = oauth.request(forURL: NSURL(string: "https://api.fitbit.com/1/user/-/\(resource.rawValue)/date/\(date.toString())/1d.json")!)
        let task = oauth.session.dataTaskWithRequest(request) { data, response, error in
            if error != nil {
                print("[ERROR] An error occured during request: \(error)")
            }
            else {
                print("[SUCCESS] Data retrieved successfully")
                print(ParsingEngine.parseFitbitData(ResourcePath.calories, data: data!))
            }
        }
        task.resume()
        return nil
    }

沒錯,在從服務器填充數據之前,該函數正在返回。 您為什么不能從完成處理程序中執行此操作? 這應該工作:

static func getFitbitData(resource: ResourcePath, date: Date, completion: (data: Int?) -> Void) {
        var rawData: NSData?
        let request = oauth.request(forURL: NSURL(string: "https://api.fitbit.com/1/user/-/\(resource.rawValue)/date/\(date.toString())/1d.json")!)
        let task = oauth.session.dataTaskWithRequest(request) { data, response, error in
            if error != nil {
                print("[ERROR] An error occured during request: \(error)")
            }
            else {
                print("[SUCCESS] Data retrieved successfully")
                let endData = ParsingEngine.parseFitbitData(ResourcePath.calories, data: data!)
                completion(endData)
            }
        }
        task.resume()
    }

您可以這樣稱呼:

FitbitService.getFitbitData(myResource, date: myDate) { data in
   //work with your data here
}

暫無
暫無

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

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