Loading data from a web API to be displayed in a tableview In my object Dish xxx.Dish, I want to access the Choice class    price and name to display . dish data load from web API and I tested data loaded success full and put the data to the object dish and it return the object list to viewcontroller to load tableview.

Output of printed console 


  Optional([xxx.Dish, xxx.Dish])


and in the dish class before append optionList?.append(_obj)


  xxx.DishOption


I am new to swift and is it right way to implement? Please suggest me? 

class Dish {
        let dishId : String
        var optionList : [DishOption]?

        init?(fromAPIResponse resposne : Dictionary&lt;String,AnyObject&gt;) {

            guard let dishId = resposne["dishId"] as? String else {
                return nil

            }
            self.dishId = dishId
            if let objs =  resposne["options"] as?  [[String: AnyObject]]{
                optionList = [DishOption]()
                for obj in objs {
                    if  let _obj = DishOption(fromAPIResponse: obj){

                        optionList?.append(_obj)

                    }
                }
            }
        }


//another file 

   class DishOption {

                let optionId : String

                var choiceList : [Choice]?

                init?(fromAPIResponse resposne : Dictionary&lt;String,AnyObject&gt;) {

                    guard let  optionId = resposne["optionId"] as? String else {
                        return nil
                    }

                    self.optionId = optionId

                    if let objs =  resposne["choices"] as?  [[String: AnyObject]]{
                        choiceList = [Choice]()
                        for obj in objs {
                            if  let _obj = Choice(fromAPIResponse: obj){

                                choiceList?.append(_obj)

                            }
                        }
                    }
                }
            }



 class Choice{
           let choiceId : String
                    let name : String
                    let price : String

                    init?(fromAPIResponse resposne : Dictionary&lt;String,AnyObject&gt;) {
                        guard let choiceId = resposne["choiceId"] as? String ,
                            let name = resposne["name"]  as? String,
                            let price = resposne["price"] as? String else {

                                return nil
                        }
                        self.choiceId = choiceId
                        self.name = name
                        self.price = price

                    }

            }


Usage:

     var  dishMenuList = [Dish]()
            guard let objs = json["menu_list"] as? [[String : AnyObject]] else {
                return
            }

            for obj in objs {

                if let _obj = Dish(fromAPIResponse: obj){

                 print(_obj.optionList) //always print nil  


                if let options = _obj.optionList {

                    for data in options {

                        print(data.displayAsButton)

                    }
                   }
                   dishMenuList.append(_obj)
                }

            }
1) i would not use inner classes.

2) i would extract the data extraction part from the init to a other class / helper - a class should only have the data structure and not how to convert it

3) typo resposne => response