Хорошо, я возьму ваш пример и сделаю следующее:
Я предположил, что ваша служба вернет true
или false
import Foundation
import Combine
class LoginViewModel: ObservableObject {
@Published var LoginStatus: Bool = false
@Published var LoginMessage: String = ""
var service = LoginService()
func Login(_ email: String, _ password: String) -> Bool {
self.LoginStatus = service.validateLogin(email: email, password: password)
return self.LoginStatus
}
}
По вашему мнению:
import SwiftUI
struct ContentView : View {
@ObservedObject var model = LoginViewModel()
var body: some View {
VStack {
Button(action: {
_ = self.model.Login("TestUser", "TestPassword")
}, label: {
Text("Login")
})
Text(self.model.LoginStatus ? "Logged In" : "Not Logged in")
}
}
}
Это должно быть что-то в этом роде.
Я удалил UserModel
, потому что вы не должны вкладывать модели.
Надеюсь, это поможет.
РЕДАКТИРОВАТЬ 1:
Для автоматической проверки чего-либо можно использовать onApear()
в своем представлении или прослушивать изменения с помощью olnrecieve()
для обновления пользовательского интерфейса или состояния
import SwiftUI
struct ContentView : View {
@ObservedObject var model = LoginViewModel()
var body: some View {
VStack {
Button(action: {
_ = self.model.Login("TestUser", "TestPassword")
}, label: {
Text("Login")
})
Text(self.model.LoginStatus ? "Logged In" : "Not Logged in")
}.onAppear {
// call a function that gets something from your server
// and modifies your state
self.model.validate()
}.onReceive(self.model.$LoginMessage, perform: { message in
// here you can update your state or your ui
// according the LoginMessage... this gets called
// whenever LoginMessage changes in your model
})
}
}