Я новачок у швидкому, використовуючи інструмент json4swift, щоб зробити клас моделі. Я хотів би знати, як отримати дані від модельного класу, мені вдалося зібрати елементи до моделі класу, використовуючи код нижче.
let responseModel = Json4Swift_Base(dictionary: searchResultsData)
Моя відповідь json:
{
"success": true,
"categorys": [
{
"categoryId": 1,
"categoryName": "Electricians "
},
{
"categoryId": 2,
"categoryName": " Drivers "
},
{
"categoryId": 3,
"categoryName": " Plumbers "
},
{
"categoryId": 4,
"categoryName": "Carpenters "
},
{
"categoryId": 5,
"categoryName": "Automobile works "
}
]
}
Інструмент Json4swift зробив два класи - клас Json4Swift_Base та Categorys. Мені потрібно отримати від модельного класу.
Відповіді:
1 для відповіді № 1Якщо ви хочете дізнатися Swift, я пропоную вам забути json4swift.
По-перше, ви повинні створити свої власні моделі: Category
і Response
Категорія:
struct Category {
let id: Int
let name: String
}
Відповідь:
struct Response {
let success: Bool
let categories: [Category]
}
По-друге, потрібно ініціалізувати ваші моделі за допомогою JSON. Ми збираємося створити протокол для цього:
typealias JSONDictionary = [String : Any]
protocol JSONDecodable {
init?(dictionary: JSONDictionary)
}
Ваші моделі повинні реалізувати цей протокол, тому ми додаємо розширення:
Розширення категорії:
extension Category: JSONDecodable {
init?(dictionary: JSONDictionary) {
guard let id = dictionary["categoryId"] as? Int,
let name = dictionary["categoryName"] as? String else {
return nil
}
self.id = id
self.name = name
}
}
Розширення відповіді:
extension Response: JSONDecodable {
init?(dictionary: JSONDictionary) {
guard let success = dictionary["success"] as? Bool,
let jsonCategoriesArray = dictionary["categorys"] as? [JSONDictionary] else {
return nil
}
self.success = success
self.categories =
jsonCategoriesArray.flatMap{ jsonCategoryDictionary in
Category(dictionary: jsonCategoryDictionary)
}
}
}
Тепер ви можете написати:
let response = Response(dictionary: jsonResponse)
if let response = response {
let success = response.success
let categories = response.categories
let firstCategory = categories[0]
// ...
}