JSONデータでオブジェクトを更新しようとしています。そのデータは、解析された後に完了ブロックに戻されます。私は試してみて、それを返すとき、私はエラーを取得する:ここでエラー:非関数型 '[JSONObject]'の値を呼び出すことができません
Cannot call value of non-function type '[JSONObject]'
は私の関数である。
static func updateResultsDictionary(urlExtension: String, completion: [JSONObject]){
var jsonDataArray = [JSONObject]()
let nm = NetworkManager.sharedManager
_ = nm.getJSONData(urlExtension: urlExtension, completion: {data in
if let jsonDictionary = nm.parseJSONFromData(data) {
let resultDictionaries = jsonDictionary["result"] as! [[String : Any]]
for resultsDictionary in resultDictionaries {// enumerate through dictionary
let jsonInfo = JSONObject(resultsDictionary: resultsDictionary)
jsonDataArray.append(jsonInfo)
}
}
})
completion(jsonDataArray) //The error happens here
}
EDIT:それは
completion: @escaping ([JSONObject]) -> Void
に
completion: [JSONObject]
を変更した後前回のエラーは発生しなくなりましたが、あなたがJSONObject
の配列であることをcompletion
パラメータを宣言した
Cannot assign value of type '()' to type '[JSONObject]'
override func viewDidLoad() {
super.viewDidLoad()
self.jsonObjectsArray = JSONObject.updateResultsDictionary(urlExtension: "/cities/basel-switzerland", completion: {JSONObject in
self.practiceTableView.reloadData()
})
}
これはあまり意味がありません。 'updateResultsDictionary'が空の配列を作成し、それをクロージャーに渡すのはなぜですか?アイテムが1つだけの場合、配列は必要ありません。または、この 'getJSONData'がクロージャを複数回呼び出すのですか? – Rob