[英]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.