【发布时间】:2020-10-05 02:54:57
【问题描述】:
我知道 Codable = Decodable & Encodable 但是当从 xcode 调用 json 时,
Codable 作为结构体给出,但提示错误
Argument type'login.Type' does not conform to expected type'Encodable' 出现。
json 代码
struct login: Codable {
var userId: String?
var userPw: String?
class func LoginBoard(_ completeHandler: @escaping (login) -> Void) {
let loginboard: String = MAIN_URL + "/member/login"
guard let url = URL(string: loginboard) else {
print("Error: cannot create URL")
return
}
var urlRequest = URLRequest(url: url)
urlRequest.httpMethod = "POST"
urlRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
urlRequest.addValue("application/json", forHTTPHeaderField: "Accept")
urlRequest.httpBody = try? JSONEncoder().encode(login) // ERROR [Argument type 'login.Type' does not conform to expected type 'Encodable']
let session = URLSession.shared
let task = session.dataTask(with: urlRequest) { (data, response, error) in
guard error == nil else {
print("error calling Post on /todos/1")
print(error!)
return
}
guard let responseData = data else {
print("Error: did not receive data")
return
}
do {
let decoder = JSONDecoder.init()
let LoginList = try decoder.decode(login.self, from: responseData)
completeHandler(LoginList)
}
catch {
print("error trying to convert data to JSON")
return
}
}
task.resume()
}
try decoder.decode
没有错误但只在 urlRequest.httpBody = 试试? JSONEncoder().encode(login)有什么问题?
【问题讨论】:
-
你想编码什么
userId和userPw?您需要编码login的实例,而不是login类型。 -
userId 和 userPw 只是 api 值。我正在尝试通过连接到服务器使用 POST 方法登录。
-
我知道。但是您要发布什么值?显示要发送到服务器的 JSON。
-
我只是想直接在IdTextField和PwTextField中输入值,并将输入值发送给服务器。
-
这是一个很好的例子,为什么以小写字母开头的结构会引起混淆????
标签: swift codable jsondecoder jsonencoder