我有一個fetchJson函數,它使用session.datatask從OpenWeatherMap服務器獲取簡單的JSON對象(字符串)。問題是當我使用尾部閉包調用此函數時我可以在尾部閉包中打印JSON對象,但是當我嘗試在尾部閉包外部打印jsonobject時,它會打印出nil。是否有任何方法可以將此jsonobject打印在closure.?Basically我需要訪問後closure.Here外的JSON對象是我fetchjson代碼:如何從使用session.datatask(with:request)的結尾閉包中獲取數據?
func fetchJson(completion: @escaping (Any)->Void){
let Url = composeURL(cityname: "Boston")
let request = URLRequest(url:Url)
let task = session.dataTask(with: request) {
(data, response, error) ->Void in
if let jsonData = data {
do{
let jsonObject = try JSONSerialization.jsonObject(with: jsonData, options: [])
OperationQueue.main.addOperation
{completion(jsonObject)
}
} catch let error {
print ("error creating JSON Object: \(error)")
}
}else if let requestError = error{
print("error fetching weather json string: \(requestError)")
}else {
print("Unexpected error with reuqest")
}
}//end of task
task.resume()
}//end of fecth json
這是我在我的視圖控制器調用fetchJson:
var Jacks : Any!
fetchJson(){
json in
Jacks = json
print(Jacks)///This prints the jsonobject correctly
}
print(Jacks) //This prints the jsonobject as nil
我不不明白爲什麼Jacks會在我將其分配給jsonobject之後爲零。任何想法?如何檢索j後面的c後面的jsonobject losure?
因此,基本上你所說的是我沒有辦法在閉包之外打印插孔或者甚至引用它? – Minty
@Minty您可以,但只有在您從API調用中獲得結果後才能執行此操作。你介意分享你想要執行的邏輯嗎? –
基本上我只需要Jacks變量,在閉包之外可以訪問json數據,以便在視圖控制器的不同部分使用。插孔實際上是我的視圖控制器中的全局變量。我如何獲得分配給插孔的JSON數據並在追蹤閉包之外使用? – Minty