gpt4 book ai didi

ios - UI未在ViewController MVVM中更新

转载 作者:行者123 更新时间:2023-12-01 21:58:10 25 4
gpt4 key购买 nike

我正在 swift 学习MVVM。我正确设置了viewModel,但是ui并未更新,实际上我将服务作为单例服务参数做了什么错?这是我的代码设置

class UserViewModel {

private var user: GTUser?
let service: UserService

var id: String {
return user?.userId ?? ""
}

var userName: String {
return user?.fullName ?? ""
}

var imageUrl: String {
return user?.docAwsUrl ?? ""
}

init(service: UserService) {
self.service = service
populateUser()
}

private func populateUser() {
service.getUserData { result in
switch result {
case .success(let user):
self.user = user
print(self.user)
case .failure(let error):
print(error)
}
}
}
}

let services = UserService()
var viewModel: UserViewModel!

override func viewDidLoad() {
super.viewDidLoad()

view.backgroundColor = .white
setupNavigation()
configure()

viewModel = UserViewModel(service: services)

DispatchQueue.main.async {
self.profileImage.getUserImage(urlString: self.viewModel.imageUrl)
self.profileLbl.text = self.viewModel.userName
}
}

我已经尝试使用dispatchQueue但仍然无法正常工作

最佳答案

您的private func populateUser()函数是异步函数,因此当您尝试从self.profileImage.getUserImage(urlString: self.viewModel.imageUrl)访问viewDidLoad时,它可能不可用,

因此,要解决此问题,您可以将完成处理程序闭包到函数中,并在成功和失败时调用完成处理程序,以便在执行操作之后

喜欢

您的init函数将关闭

init(service: UserService,completion:(Bool) -> ()) {
self.service = service
populateUser(completion)
}


private func populateUser(_ completion:(Bool) -> ()) {
service.getUserData { result in
switch result {
case .success(let user):
self.user = user
print(self.user)
completion(true)
case .failure(let error):
print(error)
completion(false)
}
}
}

现在
 viewModel = UserViewModel(service: services){[unowned self] (success) in
//Check success if you want !!
self.profileImage.getUserImage(urlString: self.viewModel.imageUrl)
self.profileLbl.text = self.viewModel.userName
}

希望对您有所帮助

关于ios - UI未在ViewController MVVM中更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60983465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com