フルフルJsonData配列 を埋めるためにこれを持っていて、私はクロージャー後に値を操作したいと思っています。エスケープクロージャー値を操作する
func getNewsAsDic(completionHandler: @escaping ([fullJsonData]) -> [fullJsonData]) {
let session = URLSession.shared
let dataTask = session.dataTask(with: requestNewsForToday()) { data, _, error in
if error == nil {
if let dic = try? JSONSerialization.jsonObject(with: data!, options: []) as? NSDictionary {
var dataArray = [fullJsonData]()
let jdata = dic?["articles"] as! [[String:Any]]
for item in jdata {
let data = fullJsonData(author: item["author"] as? String,
description: item["description"] as? String,
publishedAt: item["publishedAt"] as? String,
title: item["title"] as? String,
url: item["url"] as! String,
imageURL: item["urlToImage"] as? String)
print(item["author"] as! String)
print(item["description"] as! String)
print(item["title"] as! String)
print(item["urlToImage"] as! String)
print(item["url"] as! String)
print(item["urlToImage"] as! String)
print(item["publishedAt"] as! String)
dataArray.append(data)
}
completionHandler(dataArray)
print(jdata.count)
}
} else {
return
}
}
dataTask.resume()
}
だから、問題がある: 1)、そして、私はこのようなプロジェクトでそれを使用しようとしています何Result of call is unused, but produces '[fullJsonData]'
2)Xcodeのエラー:Cannot assign value of type '()' to type '[fullJsonData]'
var dataArray = [fullJsonData]()
dataArray = NetworkManager.shared.getNewsAsDic(completionHandler: { dict in
return dict
})
があまりにもエラーが発生しました
閉鎖の値を取って使用するのは本当ですか?
func getNewsAsDic(completionHandler: @escaping ([fullJsonData]) -> [fullJsonData]) {
:あなたはからあなたの完了ハンドラの署名を変更する必要があり
しかし、閉鎖外のmyArr値で何かしたいです。 take countや他の関数での実装を好む –
'session.dataTask'への呼び出しは、サーバからの応答を得るのに20秒かかるかもしれないが、コードの実行は止まらないので、非同期(または非ブロック)です。だからこそあなたは 'completion'コールバックを持っています。これは、サーバレスポンスを受け取ったときに実行したいコードを置く場所です。 – paulvs