#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», }