2017-01-25 2 views
0

Я новичок в быстром использовании, используя инструмент json4swift, чтобы сделать класс модели. Я хотел бы знать, как получить данные из класса модели, мне удалось сопоставить элементы для модели, используя нижеприведенный код.Json4swift model class

let responseModel = Json4Swift_Base(dictionary: searchResultsData) 

Мои JSON Быстродействие folllows:

{ 
    "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

Если вы хотите изучить 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] 
    // ... 
} 
Смежные вопросы