Согласно документам Apple:
JSONSerialization.data (withJSONObject: obj, параметры: [])
Если obj не выдаст действительный JSON, исключение составляетвыброшены.Это исключение выдается перед анализом и представляет собой ошибку программирования, а не внутреннюю ошибку.Вы должны проверить, будет ли ввод генерировать допустимый JSON, прежде чем вызывать этот метод, используя isValidJSONObject (_:).
В вашем коде исключение вызвано по причине ниже
- JSONSerialization.data (withJSONObject: obj, options: []) В этом методе вы должны передать действительный объект JSON, например, obj.Вы просто подтверждаете кодируемый протокол и передаете структурную переменную вместо объекта JSON.
Код:
struct PostOfMine: Codable {
let body: String?
let id: Int?
let title: String?
let userId: Int?
private enum CodingKeys: String, CodingKey {
case body
case id
case title
case userId
}
func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(body, forKey: .body)
try container.encode(id, forKey: .id)
try container.encode(title, forKey: .title)
try container.encode(userId, forKey: .userId)
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let newPost = PostOfMine(body: "test body", id: 20, title: "test title", userId: 20)
do {
let encoder = JSONEncoder()
let newPostData = try encoder.encode(newPost)
//Send newPostData to your server.
request.httpBody = newPostData
//Send data you your server
//For Decoding the data use JSONDecoder
let post = try JSONDecoder().decode(PostOfMine.self, from: newPostData)
debugPrint(post)
} catch {
debugPrint(error.localizedDescription)
}
}