【发布时间】:2021-02-12 00:29:32
【问题描述】:
我有意创建一个已存在于 MongoDB 中的用户,以向用户显示错误消息,例如“请选择其他用户名”或“电子邮件已在使用中”,但我无法解码服务器的响应。
我的模型旨在处理成功(用户/令牌)或错误响应(消息)...
当在后端创建帐户时,我能够成功解码用户对象...
我做错了什么?我觉得我应该以某种方式为错误模型使用枚举??
// POSTMAN RESPONSE WHEN USERNAME ALREADY TAKEN
{
"success": false,
"message": "Please choose a different username"
}
// XCODE ERROR MESSAGE
//...Expected to decode Dictionary<String, Any> but found a string/data
//instead.", underlyingError: nil))
// DATA MODELS
struct UserResponse: Decodable {
let success: Bool
let message: ErrorResponse?
var user: User?
var token: String?
}
struct ErrorResponse: Decodable, Error {
let message: String
}
class LoginService {
static func createAccount(username: String, email: String, password: String,
completion: @escaping(Result <UserResponse, Error>) -> Void) {
let user = UserSignup(username: username, email: email, password: password)
// Create URL code
do {
let encoder = JSONEncoder()
urlRequest.httpBody = try encoder.encode(user)
let dataTask = URLSession.shared.dataTask(with: urlRequest) { data, response, error in
if let error = error {
completion(.failure(error))
return
}
guard let jsonData = data else { return }
do {
let responseObject = try JSONDecoder().decode(UserResponse.self, from: jsonData)
switch responseObject.success {
case true:
completion(.success(responseObject))
case false:
// not working
guard let errorMessage = responseObject.message else {
return
}
completion(.failure(errorMessage))
}
} catch {
print(error)
}
}
dataTask.resume()
} catch {
// handle error
}
}
【问题讨论】: