/ / Json4swift classe de modèle - swift, modèle

Json4swift classe de modèle - swift, modèle

Je suis nouveau à swift, en utilisant l'outil json4swift pour créer une classe de modèle. Je voudrais savoir comment obtenir des données de la classe de modèle, j'ai réussi à mapper les éléments à la classe de modèle en utilisant le code ci-dessous.

  let responseModel = Json4Swift_Base(dictionary: searchResultsData)

Mes réponses json suivent:

{
"success": true,
"categorys": [
{
"categoryId": 1,
"categoryName": "Electricians                                      "
},
{
"categoryId": 2,
"categoryName": " Drivers                                          "
},
{
"categoryId": 3,
"categoryName": " Plumbers                                         "
},
{
"categoryId": 4,
"categoryName": "Carpenters                                        "
},
{
"categoryId": 5,
"categoryName": "Automobile works                                  "
}
]
}

L'outil Json4swift a créé deux classes, à savoir Json4Swift_Base et la classe Categorys. Je dois obtenir de la classe de modèle.

Réponses:

1 pour la réponse № 1

Si vous voulez apprendre Swift, je vous suggère d'oublier json4swift.

Tout d'abord, vous devez construire vos propres modèles: Category et Response

Catégorie:

struct Category {
let id: Int
let name: String
}

Réponse:

struct Response {
let success: Bool
let categories: [Category]
}

Deuxièmement, vous souhaitez initialiser vos modèles avec un JSON. Nous allons créer un protocole pour cela:

typealias JSONDictionary = [String : Any]

protocol JSONDecodable {
init?(dictionary: JSONDictionary)
}

Vos modèles doivent implémenter ce protocole, nous ajoutons donc des extensions:

Extension de la catégorie:

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 de la réponse:

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)
}
}
}

Maintenant, vous pouvez écrire:

let response = Response(dictionary: jsonResponse)

if let response = response {
let success = response.success
let categories = response.categories
let firstCategory = categories[0]
// ...
}