1) В этой строке вы делаете запросы API, так что это асинхронный c процесс
viewModel = ProfileViewModel(services: services)
2) Без ожидания для успешного ответа вы пытаетесь использовать данные ответа в следующей строке
profileLbl.text = viewModel.fullName
Советы для вас
1) Вы должны использовать замыкания для обнаружения API ответы.
class ProfileViewModel {
var info: InfoResult?
private let services: BasicInfoServices
init(services: BasicInfoServices) {
self.services = services
}
func loadData(success: (()->()), failure: ((String)->())){
self.services.getBasicInfo { [weak self] result in
switch result {
case .success(let infoResult):
self?.info = infoResult
success()
case .failure(let error):
print(error)
failure(error.localizedDescription)
}
}
}
}
2) После получения данных вы можете показать это в представлении.
class ViewController: UIViewController {
let viewModel = ProfileViewModel(services: BasicInfoServices())
@IBOutlet weak var lblProfileID:UILabel!
@IBOutlet weak var lblFullName:UILabel!
@IBOutlet weak var lblPhoneNumber:UILabel!
@IBOutlet weak var lblEmail:UILabel!
@IBOutlet weak var lblDataOfBirth:UILabel!
override func viewDidLoad() {
super.viewDidLoad()
self.viewModel.loadData(success: {
self.populateUserData()
}, failure: { errorString in
print(errorString)
})
}
func populateUserData(){
self.lblProfileID.text = self.viewModel.info?.id
self.lblFullName.text = self.viewModel.info?.fullName
self.lblPhoneNumber.text = self.viewModel.info?.phoneNumber
self.lblEmail.text = self.viewModel.info?.email
self.lblDataOfBirth.text = self.viewModel.info?.dob
}
}