我尝试使用JSON数据更新对象。解析后,该数据将在完成块中返回。当我尝试返回它时,我收到错误:
无法调用非函数类型的值' [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
}
编辑:更改后
完成:[JSONObject]
到
完成:@escaping([JSONObject]) - >空隙
它不再抛出先前的错误,但现在当我使用完成块时,它会抛出一个新的错误:
无法指定类型'()'的值输入' [JSONObject]'
override func viewDidLoad() {
super.viewDidLoad()
self.jsonObjectsArray = JSONObject.updateResultsDictionary(urlExtension: "/cities/basel-switzerland", completion: {JSONObject in
self.practiceTableView.reloadData()
})
}
答案 0 :(得分:0)
您已将completion
参数声明为JSONObject
的数组。看来你的意思是将它声明为一个传递一个参数的闭包,该参数的类型是JSONObject
的数组。
static func updateResultsDictionary(urlExtension: String, completion: @escaping (_: [JSONObject]) -> Void) {
您还需要更改调用此方法的方式:
override func viewDidLoad() {
super.viewDidLoad()
JSONObject.updateResultsDictionary(urlExtension: "/cities/basel-switzerland", completion: { (results) in
self.jsonObjectsArray = results
self.practiceTableView.reloadData()
})
}
您致电:
completion(jsonDataArray)
需要将移动到实际设置jsonDataArray
的位置。需要在完成块结束时调用它来调用getJSONData
。