使用 MVVM 将数据填充到 UITableView

Posted

技术标签:

【中文标题】使用 MVVM 将数据填充到 UITableView【英文标题】:Populate data onto UITableView with MVVM 【发布时间】:2020-01-17 10:06:39 【问题描述】:

(更新)我有这个 ViewModel 和 Viewcontroller,我很难将数据数组填充到 tableview 中。 所以我有这个联系人数组,我在视图模型中创建了通用绑定。我从互联网上学到了这种方法,但我未能将其拉入 ViewController。

class ContactViewModel: ContactViewModelProtocol 

    let contact: ContactModel
    var id: Observable<String>

    var firstName: Observable<String>

    var lastName: Observable<String>

    var email: Observable<String>

    var phone: Observable<String>

    init(_ contact: ContactModel) 
        self.contact = contact

        self.id = Observable(contact.id!)
        self.firstName = Observable(contact.firstName!)
        self.lastName = Observable(contact.lastName!)
        self.email = Observable(contact.email!)
        self.phone = Observable(contact.phone!)

    


protocol ContactViewModelProtocol 
    var id: Observable<String>  get 
    var firstName: Observable<String>  get 
    var lastName: Observable<String>  get 
    var email: Observable<String>  get 
    var phone: Observable<String>  get 


class ViewController: UITableViewController
 var contacts: ContactViewModel
        didSet
            contacts.id.bindAndFire 
                [unowned self] in
                self.textbox.text = $0
            
            contacts.firstName.bindAndFire 
                [unowned self] in
                self.textbox.text = $0

            
            contacts.lastName.bindAndFire 
                [unowned self] in
                self.textbox.text = $0

            
            contacts.email.bindAndFire 
                [unowned self] in
                self.textbox.text = $0

            
            contacts.phone.bindAndFire 
                [unowned self] in
                self.textbox.text = $0

            

        
    

【问题讨论】:

这不是代码编写服务,如果您尝试过多次,请选择您最好的尝试并发布代码。 教程够多了 嗨,我已经更新了问题的更多细节 【参考方案1】:

在阅读下面的答案之前,请先了解这个主题Swift Codable Protocol,MVVM Design Pattern

方法

struct TableData : Codable 
   let table : [Table]?

struct Table : Codable 
    let id : String?,
    let firstName : String?,
    let lastName : String?,
    let email : String?,
    let phone : String?


class TableViewModel 

    public var data : TableData?

    init() 

       let jsonString = """
[
  
    "id": "1111",
    "firstName": "Phoebe",
    "lastName": "Monroe",
    "email": "phoebemonroe@furnafix.com",
    "phone": "(222) 553-3410"
  ,
  
    "id": "2222",
    "firstName": "Lidia",
    "lastName": "Wilkins",
    "email": "lidiawilkins@furnafix.com",
    "phone": "(111) 482-3866"
  
]
"""

       let jsonData = Data(jsonString.utf8)
       data = try decoder.decode(TableData.self, from: jsonData)
    



class TableViewController : UITableViewController , UITableViewDelegate , UITableViewDataSource 
    @IBOutlet lazy weak var tableView : UITableView!

    var viewModel : TableViewModel?

    override func viewDidLoad() 
        super.viewDidLoad()
        tableView.delegate = self 
        tableView.dataSource = self
        viewModel = TableViewModel()
    

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        return data.table.count
    



【讨论】:

感谢您的回复。我可以知道在 ViewModel 中实现 tableview 是正确的 MVVM 方式吗? 跟随教程,这里有很多教程,比如一个benoitpasquier.com/ios-swift-mvvm-pattern 嗨,我已经更新了问题的更多细节

以上是关于使用 MVVM 将数据填充到 UITableView的主要内容,如果未能解决你的问题,请参考以下文章

(ZK 7) 自动填充不绑定我的数据(MVVM 和作曲家)

从数据表添加到字典记录

我应该如何访问有关用于使用RxSwift和MVVM填充表格视图的数组的数据

是否有某些静态单元填充了其余的视图?

使用 MVVM 从 WPF ListView 项触发双击事件

ObservableCollection刷新视图MVVM