[英]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.