【发布时间】:2019-08-08 01:10:03
【问题描述】:
我希望接受评估以确保正确实现 Swift MVVM。
另外,如果还有什么可以补充的,请修改。
1。 AppDelegate.swift
在显示 ViewController 之前,AppDelegate 指定一个 ViewModel。
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions:
[UIApplication.LaunchOptionsKey: Any]?) -> Bool {
if let rootVC = window?.rootViewController as? ViewController {
rootVC.viewModel = MainViewModel()
}
return true
}
2。 ViewController.swift
在 ViewController 中执行 DataBinding。 TableView 也是使用扩展名指定的。
class ViewController: UIViewController {
var viewModel: MainViewModel!
override func viewDidLoad() {
super.viewDidLoad()
viewModel.bind { [weak self] in
DispatchQueue.main.async {
print("TableView reloadData")
// tableView reload
}
}
viewModel.addText(addText: "test")
print("count \(viewModel.count)")
}
}
class TextListCell: UITableViewCell {
}
extension ViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return viewModel.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell: TextListCell = tableView.dequeueReusableCell(withIdentifier: "TextListCell", for: indexPath) as! TextListCell
let test = viewModel.texts[indexPath.row]
return cell
}
}
extension ViewController: UITableViewDelegate {
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("\(indexPath.row.description)")
}
}
3。 MainModel.swift
模型被称为数据管理。 但是,我不明白业务逻辑是由模型处理的。
struct TextEditor {
let text: String
}
4。 MainViewModel.swift
模型更新后,将结果通知ViewModel并准备好要在View中显示的数据。
protocol MainViewModelProtocol: class {
func bind(didChange: @escaping () -> Void)
func addText(addText: String)
var count: Int { get }
var texts: Array<TextEditor> { get }
}
class MainViewModel: MainViewModelProtocol {
private var didChange: (() -> Void)?
var texts: [TextEditor] = [] {
didSet {
didChange?()
}
}
func bind(didChange: @escaping () -> Void) {
self.didChange = didChange
}
var count: Int {
return texts.count
}
func addText(addText: String) {
self.texts.append(TextEditor(text: addText))
}
}
【问题讨论】:
-
代码审查属于Code Review。请从此处删除您的问题并在此处发布。
-
虽然代码审查可以提出有趣的问题,但我们不在这里处理这些问题。或许 Code Review 网站会更好。
-
我会在 Code Review 上发布。谢谢你的回答。