gpt4 book ai didi

ios - Swift:延迟加载变量与 MVC 模型?

转载 作者:行者123 更新时间:2023-11-29 01:05:53 26 4
gpt4 key购买 nike

我正在使用 MVC 模型构建应用程序。我使用延迟加载技术来填充一个变量。 (模型)这个变量由一个 UIViewController (Controller) 控制

但我不知道模型操作完成后如何重新加载或触发 View Controller 。这是我的代码

模型(延迟加载数据)

class func allQuotes() -> [IndexQuotes]
{
var quotes = [IndexQuotes]()
Alamofire.request(.GET, api_indexquotes).responseJSON { response in
if response.result.isSuccess && response.result.value != nil {
for i in (response.result.value as! [AnyObject]) {
let photo = IndexQuotes(dictionary: i as! NSDictionary)
quotes.append(photo)
}

}
}

return quotes
}

和 View Controller 的部分

类别索引:

UIViewController,UICollectionViewDelegate,UICollectionViewDataSource {

var quotes = IndexQuotes.allQuotes()
var collectionView:UICollectionView!

override func viewDidLoad() {

这是一个非常严肃的问题,我很困惑将使用什么技术来实现我的目的?

最佳答案

由于 Alamofire 异步工作,您需要一个完成 block 来在收到数据后返回数据

  class func allQuotes(completion: ([IndexQuotes]) -> Void)
{
var quotes = [IndexQuotes]()
Alamofire.request(.GET, api_indexquotes).responseJSON { response in
if response.result.isSuccess && response.result.value != nil {
for photoDict in (response.result.value as! [NSDictionary]) {
let photo = IndexQuotes(dictionary: photoDict)
quotes.append(photo)
}
}
completion(quotes)
}
}

或者更“敏捷”一些

... {
let allPhotos = response.result.value as! [NSDictionary]
quotes = allPhotos.map {IndexQuotes(dictionary: $0)}
}

我还建议使用原生 Swift 集合类型而不是 NSArrayNSDictionary

在 View Controller 的 viewDidLoad 中调用 allQuotes 并在主线程的完成 block 中重新加载 TableView 。

以小写字母开头的indexQuotes属性假定为 TableView 的数据源数组

var indexQuotes = [IndexQuotes]()

override func viewDidLoad() {
super.viewDidLoad()
IndexQuotes.allQuotes { (quotes) in
self.indexQuotes = quotes
dispatch_async(dispatch_get_main_queue()) {
self.tableView.reloadData()
}
}
}

关于ios - Swift:延迟加载变量与 MVC 模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36369423/

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