2017-01-07 4 views
-1

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() 


    }) 


    } 
+0

これはあまり意味がありません。 'updateResultsDictionary'が空の配列を作成し、それをクロージャーに渡すのはなぜですか?アイテムが1つだけの場合、配列は必要ありません。または、この 'getJSONData'がクロージャを複数回呼び出すのですか? – Rob

答えて

0

:私はそれが新しいエラーをスロー完了ブロックを使用します。これは、型が配列JSONObjectになる1つのパラメータを渡すクロージャとして宣言することを意味しているようです。

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への呼び出しの完了ブロックの最後に呼び出す必要があります。

+0

ありがとう、ありがとう! – SwiftyJD

関連する問題