SwiftUI Самый простой MVVM - PullRequest
       17

SwiftUI Самый простой MVVM

0 голосов
/ 03 августа 2020

Я попытался создать простейшую модель ViewModel (MVVM) для SwiftUI в качестве учебного упражнения. Результат ниже. У меня вопрос: является ли этот код самым коротким mvvm или вы могли бы сделать его еще проще и короче?

// Model

import Foundation

struct SimplestModel <Content> {
   var mItem: String
   init() {mItem = ""}
}

// View Model

import SwiftUI

class Portal {

   private var model : SimplestModel<String> = Portal.setContent()

   static func setContent() -> SimplestModel<String>{
       return SimplestModel<String>.init()
}

func getString() -> String {
    model.mItem = "Portal"
    return model.mItem
  }

}

// View

struct ContentView: View {

  var viewModel: Portal

  var body: some View {
      Text(viewModel.getString())
  }
}

1 Ответ

1 голос
/ 03 августа 2020

В вашем случае ContentView не будет обновляться при изменении модели (или модели просмотра). Если вы хотите полностью скрыть модель (и, конечно, все еще обновили представление), здесь возможен подход

Примечание: я не вижу необходимости в дженериках в этом случае

struct SimplestModel {
    var mItem: String = ""
}

// View Model

import SwiftUI

class Portal: ObservableObject {
    @Published var name: String {
        didSet {
            if name != model.mItem {  // avoid cycling
                model.mItem = name
            }
        }
    }

    private var model: SimplestModel {
        didSet {
            if name != model.mItem {    // avoid cycling
                name = model.mItem
            }
        }
    }

    init(model: SimplestModel = SimplestModel()) {
        self.model = model
        self.name = model.mItem
    }
}

// View

struct DemoContentView: View {

    @ObservedObject var viewModel: Portal

    var body: some View {
        Text(viewModel.name)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...