close

ViewModel:

        

            import WebAPI
            import MVVM

            final class Page2ViewModel: ObservableObject, Refreshable, Updateable {

                @Published var isUpdate: Bool = false
                
                @Published private(set) var cellViewModels: [Page2CellViewModel] = []
                @Published private(set) var model: MainApodModel? {
                    didSet {
                        guard let model = model else {
                            return
                        }

                        cellViewModels = model.result.map { Page2CellViewModel(model: $0) }
                    }
                }

                func refresh() {

                    isUpdate = true

                    let parameter = MainApodParameter()

                    Task { @MainActor in
                        do {
                            let model: MainApodModel = try await MainApodWebAPI().invokeAsync(parameter)
                            
                            isUpdate = false
                            self.model = model
                            
                        } catch let error {

                            print(error.localizedDescription)

                            isUpdate = false
                        }
                    }
                }
            }
        

ViewController:

        

import UIKit
import MVVM
import Combine
import WebAPI

class Page2ViewController: UIViewController {

    @IBOutlet weak var collectionView: UICollectionView!
    @IBOutlet weak var activityIndicator: UIActivityIndicatorView!
    
    typealias ViewModelType = Page2ViewModel
    let viewModel: ViewModelType! = ViewModelType()

    private var cellViewModelsCancellable: AnyCancellable?
    private var isUpdateCancellable: AnyCancellable?
    private var modelCancelable: AnyCancellable?

    override func viewDidLoad() {
        super.viewDidLoad()

        cellViewModelsCancellable = viewModel.$cellViewModels.sink { [weak self] (cellViewModels: [Page2CellViewModel]) in
            self?.collectionView.reloadData()
        }
        
        isUpdateCancellable = viewModel.$isUpdate.sink { [weak self] (isUpdate: Bool) in
            self?.showProgress(isUpdate: isUpdate)
        }
    }
}


 

arrow
arrow
    全站熱搜

    小賢 發表在 痞客邦 留言(0) 人氣()