【问题标题】:Populate data onto UITableView with MVVM使用 MVVM 将数据填充到 UITableView
【发布时间】: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

            }

        }
    }

【问题讨论】:

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

标签: ios swift uitableview mvvm


【解决方案1】:

在阅读下面的答案之前,请先了解这个主题Swift Codable ProtocolMVVM 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
  • 嗨,我已经更新了问题的更多细节
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多