程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Swift MVVM 设计模式大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Swift MVVM 设计模式?

开发过程中遇到Swift MVVM 设计模式的问题如何解决?下面主要结合日常开发的经验,给出你关于Swift MVVM 设计模式的解决方法建议,希望对你解决Swift MVVM 设计模式有所启发或帮助;

我有一个 MVVM 项目。我正在 viewmodel 中获取 JsON 数据。我怎样才能重新加载

  1. 在 VIEw.swift 中定义的表视图
import UIKit

final class UsersListScreenVIEw: UIVIEw {
    
    lazy var userListtable = UItableVIEw()

    init() {
        super.init(frame: .zero)
        
        addSubvIEws()
        setUpConsTraints()
        setUpVIEws()
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    
    private func addSubvIEws() {
        [userListtable]
            .forEach {
                addSubvIEw($0)
                $0.translatesautoresizingMaskIntoConsTraints = false
            }
    }
    
    private func setUpConsTraints() {
        
        NSLayoutConsTraint.activate([
            userListtable.centerXAnchor.consTraint(equalTo: self.centerXAnchor),userListtable.centerYAnchor.consTraint(equalTo: self.centerYAnchor),userListtable.leadingAnchor.consTraint(equalTo: self.leadingAnchor,constant: 36.0),userListtable.TrailingAnchor.consTraint(equalTo: self.TrailingAnchor,constant: -36.0),userListtable.heightAnchor.consTraint(equalTo: self.heightAnchor,multiplIEr: 1)
        ])
    }
    
    private func setUpVIEws() {
        BACkgroundcolor = UIcolor.white
    }
}
  1. 在 viewmodel.swift 中接收 JsON
final class UsersListScreenviewmodel {
    
    var userList = [UsersList]()
    weak var vc: UsersListScreenVIEwController?

    let urlToFetchData = "https://Jsonplaceholder.typicode.com/users"
    
    func getUsersList() {
        URLSession.shared.dataTask(with: URL(String: urlToFetchData)!) { (data,response,error) in
            if error == nil {
                if let data = data {
                    do {
                        let userResponse = try JsONDecoder().decode([UsersList].self,from: data)
                        self.userList.append(contentsOf: userResponsE)
                        dispatchQueue.main.async {
                            userListtable.reloadData()
                        }
                    }catch let err {
                        print(err.localizedDescription)
                    }
                }
            } else {
                print(error?.localizedDescription as Any)
            }
            
        }.resume()
    }

如何从 viewmodel.swift 文件中调用 userListtable.reloaddata。

解决方法

如何从 ViewModel.swift 文件中调用 userListTable.reloaddata

你没有。这将违反权力分立。通常,视图模型发送一个订阅视图的信号;因此,视图听到新数据已准备就绪并获取它并重新加载表。

,

您可能希望在视图生命周期事件 onAppear (SwiftUI) 响应中向视图模型(也称为操作或意图)发送“onAppear”事件。 viewDidAppear (UIKit) 到视图模型以支持视图模型做出明智的操作。基于内部维护的状态,视图模型然后可以开始加载或更新数据,或激活订阅以收听数据更新。同时,视图独立观察视图模型生成的状态变化。这些代表了视图应该如何呈现自身的单一来源。

使用从视图发送的“onAppear”事件(或类似的生命周期事件)是可选的。例如,视图模型可以在创建时独立开始加载数据。视图开始观察视图模型(更准确地说,视图模型的视图状态)可能就足够了。

因此,您需要的是一个公开可观察视图状态的视图模型,以及一个观察它的视图或视图控制器。一旦视图状态发生变化,您就可以在您的视图(视图控制器)中调用一个处理程序。 UIKit 的具体实现可能会将视图状态映射到符合 UITableView 的数据源,并根据新旧数据的差异更新表视图

您的视图模型还公开了一个 API,您可以在其中将“事件”(也称为操作、意图)从视图发送到上述视图模型,或处理用户对 UI 控件的操作。

请注意,视图状态是不可变的。

大佬总结

以上是大佬教程为你收集整理的Swift MVVM 设计模式全部内容,希望文章能够帮你解决Swift MVVM 设计模式所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:设计模式