簡體   English   中英

使用 Alamofire 快速獲取 Item 對象數組

[英]Swift getting array of Item objects using Alamofire

我剛開始用 Swift 編程,並試圖從我的 API 中獲取一些結果,但據我所知,我不能簡單地從函數中返回,因為它是異步的。 我正在使用 Alamofire 和 SwiftyJSON。

 func getItems(completionHandler: @escaping ([Item], Error?) -> ()) {
        getData(url: API.getUrl, completionHandler: completionHandler)
    }

public func getData(url: URL, parameters: [String: AnyObject]? = nil, completionHandler: @escaping ([Item], Error?) -> ()) {
    Alamofire.request(url, method: .get)
        .responseJSON { response in
            switch response.result {
            case .success(let val):
                let json = JSON(val)
                if let array = json.array {
                    var itemArray: [Item] = []
                    for item in array {
                        guard let dictionary = item.dictionaryObject else {
                            continue
                        }
                        itemArray.append(item)
                    }
                    completionHandler(itemArray, nil)
                }
            case .failure(let error):
                print(error)
            }
    }
}

這是一個單獨的類,我在其中執行這些操作,因此這個完成處理程序。 我定義了一個簡單的Item類,我想在我的 ViewController 中獲取一個數組(稍后使用對象數組填充表)。 但是,它似乎不是這樣工作的?

var array = [Item]
let manager = APIManager()
APIManager.getItems(){ response in
    array = ...
}

這就是我的想法,但我不確定這是如何工作的。 有什么想法嗎? 感謝所有幫助。

編輯:最初,這在完成處理程序中使用了 NSDictionary,它仍然在這里的代碼中。 這個想法是只返回一個對象數組

您將回調定義為([Item], Error?) -> ()因此您應該將其用作:

var array = [Item]
let manager = APIManager()
APIManager.getItems() { items, error in
    array = items
    //and then you can reload tableview if it uses array as its source
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM