使用 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的主要内容,如果未能解决你的问题,请参考以下文章
我应该如何访问有关用于使用RxSwift和MVVM填充表格视图的数组的数据