gpt4 book ai didi

ios - 使用模型异步数据和 TableView

转载 作者:行者123 更新时间:2023-11-28 11:13:42 25 4
gpt4 key购买 nike

我正在创建一个应用程序并且我已经完成了所有逻辑,但我想进行代码重构并创建 MVC 模式。但是我处理一些来自 API 的异步信息。

/MenuViewController

Alamofire.request(.GET, Urls.menu).responseJSON { request in
if let json = request.result.value {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)) {
let data = JSON(json)
var product: [Product] = []

for (_, subJson): (String, JSON) in data {
product += [Product(id: subJson["id"].int!, name: subJson["name"].string!, description: subJson["description"].string!, price: subJson["price"].doubleValue)]
}

dispatch_async(dispatch_get_main_queue()) {
self.products += product
self.tableView.reloadData()
}
}
}
}

这是我的代码,已经可以运行了。但我想创建一个模型来处理这个问题,并将产品数组返回到我的 MenuViewController。

模型/菜单

class Menu {
var products: [Product] = []

init() {
Alamofire.request(.GET, Urls.menu).responseJSON { request in
if let json = request.result.value {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)) {
let data = JSON(json)
var product: [Product] = []

for (_, subJson): (String, JSON) in data {
product += [Product(id: subJson["id"].int!, name: subJson["name"].string!, description: subJson["description"].string!, price: subJson["price"].doubleValue)]
}

dispatch_async(dispatch_get_main_queue()) {
self.products += product
}
}
}
}
}

func totalOfProducts() -> Int {
return self.products.count
}

func getProducts() -> [Product]? {
return self.products
}

func getProductFromIndex(index: Int) -> Product {
return self.products[index]
}
}

但我有自己的想法,如何将 main_queue 转移到另一个类?

所以我尝试了这样的事情:

class MenuViewControlvar: UITableViewController {

var products: [Product] = []
let menu: Menu = Menu()

// MARK: View Controller Lifecycle

override func viewDidLoad() {
super.viewDidLoad()

if let products = menu.getProducts() {
self.tableView.reloadData()
}

// rest of the code

但是没有用。我的 TableView 永远不会更新。

我想知道我是否可以这样做,或者我必须将我的 Alamofire 代码保存在 viewDidLoad() 中,来自 MenuViewController

谢谢。

最佳答案

我只是为您提供了我将遵循的步骤的方向(不是编写代码时认为您可以解决它):

首先,编写一个接受网络请求和竞争 block 的网络类。完成 block 应在网络完成后立即执行。这是一个包装类,可以跨类使用。

其次,编写一个模型类,其中包含 View Controller 功能/ View 绘制所需的所有参数。

第三, 从 View Controller 调用网络类。在完成 block 中,传递模型设置、表重新加载代码和任何代码以删除加载覆盖/指示器。这个 block 应该在主队列上执行。

第四,添加代码以在触发网络之前显示加载叠加层/指示器。

关于ios - 使用模型异步数据和 TableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33271545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com