1
我刚刚开始在Swift中编程,并试图从我的API中获取一些结果,但据我所知,我不能简单地从函数返回,因为它是异步的。我正在使用Alamofire和SwiftyJSON。Swift使用Alamofire获取Item对象的数组
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 = ...
}
这就是我的想法,但我不确定它是如何工作的。有什么想法吗?所有的帮助表示赞赏。
编辑:最初,它在completionhandler中使用了NSDictionary,它仍然在代码中。这个想法是只返回一个对象
我一直在经历的代码,并在我的ViewController把上面这段代码。它似乎一路顺利,因为有数据,但它不会将任何数据放入'array'中?保留空 – dnsko
你尝试使用断点吗?也许你没有任何东西从我做的 –
,即使在打印数据的地方被分配给'array'时,它显示了两个项目。在将其添加到其中时似乎出错。我的数组是这样声明的:'var array = [Item())',当我删除括号时,当我的代码和打印元素中的'array = items'中的断点出现错误时,它会出错 – dnsko