【问题标题】:How can I move a loadCategories() func from SomeViewController to SomeViewModel?如何将 loadCategories() 函数从 SomeViewController 移动到 SomeViewModel?
【发布时间】:2022-01-22 20:21:38
【问题描述】:

所以我有以下功能:

var categoryArray: [Category] = []

private func loadCategories() {

    downloadCategoriesFromFirebase { (allCategories) in

      self.categoryArray = allCategories
      self.collectionView.reloadData()
    }
  }

目前在我的 SomeViewController 中。我需要将其移至 SomeViewModel。

抱歉,如果我的问题没有很好地表述,请询问您是否需要更多信息,因为我对这一切都很陌生。

提前致谢

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    假设您的 SomeViewController 中有对 SomeViewModel 的引用,您可以将代码移到那里。

    例如:

    import UIKit
    
    class ViewController: UIViewController {
            
        private var viewModel: ViewModel!
     
        override func viewDidLoad() {
            super.viewDidLoad()
            callToViewModel()
        }
        
        func callToViewModel() {
            viewModel.loadCategories {
                self.collectionView.reloadData()
        }
    
        // rest of your code 
    }
    

    ViewModel 可能看起来像这样:

    import Foundation
    
    class ViewModel: NSObject {
        
        var categoryArray: [Category] = []
    
        override init() {
            super.init()
        }
        
        func loadCategories(completion: (() -> Void)?) {
            downloadCategoriesFromFirebase { (allCategories) in
                self.categoryArray = allCategories
                completion?()
            }
        }
    }
    

    重新加载数据时,请确保现在引用viewModel.categoryArray 而不是self.categoryArray

    请注意,我正在使用完成处理程序来通知ViewController ViewModel 中的调用已完成。还有其他(也许更好的)方法可以做到这一点,比如Combine framework

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-24
      • 1970-01-01
      • 2018-08-10
      • 2012-05-27
      • 2016-12-11
      • 2019-06-14
      • 2019-09-02
      • 2014-03-28
      相关资源
      最近更新 更多