не удалось интегрировать запрос post в SwiftUI

#swiftui #rest

Вопрос:

Я хочу интегрировать API POST для своей страницы входа в систему, но я не знаю, где я ошибаюсь. когда я бегу, я получаю сообщение об ошибке

введите описание изображения здесь

МОЙ httpAuth.swift

 import Foundation
import SwiftUI
import Combine

//struct ServerMessage: Decodable {
//   let res, message: String
//}

struct LoginResponse: Decodable {
//    let errorMessage: String?
//    let MESSAGE: String
//    let STATUS: String
    let result: LoginResponseData
}

struct LoginResponseData : Decodable {
    let email: String
    let MESSAGE: String
    let STATUS: String
    let user_id: String
}


class HttpAuth: ObservableObject {

    @Published var authenticated = false

    func postAuth(email: String, password: String) {
        
        let url = URL(string: "https://acubeappsdevelopment.com/Development/MysteryBox/MysteryBoxApis/signup")!

        let body: [String: String] = ["email": email, "password": password]

        let finalBody = try! JSONSerialization.data(withJSONObject: body)

        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.httpBody = finalBody
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")

        URLSession.shared.dataTask(with: request) { (data, response, error) in
               
//            print("data  all:" ,data)

            guard let data = data else { return }
            
            let resData = try! JSONDecoder().decode(LoginResponse.self, from: data)
            print("data => ",resData)
            print(resData.result.STATUS)
            if resData.result.STATUS == "true" {
                DispatchQueue.main.async {
                    self.authenticated = true
                }
            }
        }.resume()
    }
}

 

моя страница входа.swift

 import SwiftUI

struct LoginPage: View {
    @State private var email: String = ""
       @State private var password: String = ""

       @ObservedObject var manager = HttpAuth()

       var body: some View {

           VStack(alignment: .leading) {

               if self.manager.authenticated {
                   Text("Correct!").font(.headline)
               }

               Spacer()

               Text("email")
               TextField("placeholder", text: $email)
                   .textFieldStyle(RoundedBorderTextFieldStyle())
                   .border(Color.green)
                   .autocapitalization(.none)

               Text("Password")
               SecureField("placeholder", text: $password)
                   .textFieldStyle(RoundedBorderTextFieldStyle())
                   .border(Color.green)

               Button(action: {
                   self.manager.postAuth(email: self.email, password: self.password)
               }) {
                   HStack{
                       Spacer()
                       Text("Login")
                       Spacer()
                   }
                   .accentColor(Color.white)
                   .padding(.vertical, 10)
                   .background(Color.red)
                   .cornerRadius(5)
                   .padding(.horizontal, 40)

               }
               Spacer()
           }.padding()
}
}

struct LoginPage_Previews: PreviewProvider {
    static var previews: some View {
        LoginPage()
    }
}
 

МОЙ json выглядит так

 {
    "result": {
        "MESSAGE": "Login Successful",
        "STATUS": "true",
        "user_id": "4",
        "email": "xyz@gmail.com",
        "phone": "9988778899",
        "countryCode": "971",
        "name": "gouravjhhkfs",
        "coupon": "1",
        "age": "25 jul 2020",
        "gender": "male",
        "token": null
    }
}
 

пожалуйста, предложите мне лучший способ разрешить api post.

Комментарии:

1. Уберите ! и используйте do/catch

2. я сделал, но все еще получил ошибку @loremipsum

3. В чем заключается ошибка? дословный. это ты положил print(error) в catch него ?

4. Похоже, что в вашем json нет значения, связанного с ключом «электронная почта». Вы можете распечатать полученный json с помощью a print(String(data: data, encoding: .utf8)) , прежде чем пытаться его декодировать.

5. в моем json «результат» есть ключ и значение электронной почты: { «электронная почта»: «xyz@gmail.com», }