【发布时间】:2021-08-05 07:20:41
【问题描述】:
我无法通过传递给我的视图的环境对象将我解码为结构的数据显示到我的视图中。显示的错误消息是“调用初始化程序时没有完全匹配”。我一直想弄明白,但没有运气。
这是我的网络文件的一些代码,用作我解码结构的真实来源
class AuthViewModel: ObservableObject {
@Published var user: LoginResponseData.Root? = nil
@Published var alert: CustomAlert? = nil
@Published var claimHistroy: ClaimStruct? = nil
var authentication: AuthenticationCheck? = nil
var showLoader = false
let networkService: NetworkService = NetworkService.shared
func signIn(username: String, password: String) {
networkService.signIn(username: username, password: password) { (result) in
switch result {
case .success(let user):
print("This user last name is: \(user.result.login.userName.name.fullName)")
self.user = user
self.authentication?.updateValidation(success: true)
// Calls method
self.profileSessionMember()
case .failure(let error):
print("The error is: \(error.localizedDescription)")
//Reset the variable
self.user = nil
self.authentication?.updateValidation(success: false)
// Pass a message to the user
self.alert = CustomAlert(title: "Invalid Credentials", message: "Either username or password is incorrect. Please try again")
}
}
}
/// Gets the Search Savings Amouny from decoded struct
func profileSessionMember() {
networkService.profileSessionMember { result in
switch result {
case .success(let userHistory):
// Sets the claimHistory
self.claimHistroy = userHistory
case .failure(let error):
print(error)
}
}
}
class AuthenticationCheck: ObservableObject {
@Published var isValidated = false
func updateValidation(success: Bool) {
withAnimation {
isValidated = success
}
}
}
这是我的身份验证,将 environmentObject 传递给我的视图
@main
struct SomeApp: App {
@StateObject var authentication = AuthenticationCheck()
@StateObject var vm: AuthViewModel = AuthViewModel()
var body: some Scene {
WindowGroup {
if authentication.isValidated {
ContentView()
.environmentObject(vm)
} else {
Signin()
.environmentObject(vm)
.environmentObject(authentication)
}
//TestView()
}
}
}
这是我试图显示信息的地方
struct SearchHistory: View {
@EnvironmentObject var vm: AuthViewModel
var body: some View {
VStack {
Text("BASED ON YOUR SEARCH HISTORY")
.font(.title3)
.fontWeight(.heavy)
.foregroundColor(Color(red: 0.584, green: 0.655, blue: 0.992, opacity: 100.0))
.multilineTextAlignment(.center)
.padding()
HStack {
Image(systemName: "dollarsign.circle")
.resizable()
.frame(width: 43.0, height: 44.0)
.aspectRatio(contentMode: .fill)
.padding()
VStack{
Text("Total")
.multilineTextAlignment(.center)
Text("Amount")
.multilineTextAlignment(.center)
// This does not work
Text(vm.claimHistroy?.result.member.yearToDateSearchSavingsAmount)
}
}
}
}
}
【问题讨论】:
-
错误信息出现在哪一行?
-
@Larme 我发布的代码的最后一行。我对哪些代码不起作用有意见
标签: swift networking swiftui