错误:无法调用非函数类型的值' [JSONObject]'

时间:2017-01-07 22:45:36

标签: json swift

我尝试使用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()


    })


  }

1 个答案:

答案 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