将Json映射到swift 3.0中的对象

时间:2016-11-29 11:25:27

标签: ios json swift3

我收到服务器的回复,请按以下格式说明:

  {
    //Array of models
        "A_Key" : [
                    {
                      "B_data" : ""
                    }
                  ]
        //dictionary 
        "A_Key_2" : {
                       "C_data" : ""
                    }
        "A_Key_3" : "0"
        "A_Key_4" : 0
    }

现在我正在尝试为上述响应创建模型(我不想使用任何pod或库)。

所以我所做的是:

class A{

     let A_Key : Array<B>!
     let A_Key_2 : C!
     let A_Key_3 : String!
     let A_Key_4 : Int!

     init(withDictionary dict:Dictionary<String, Any>){

          self.A_Key = A.getArrayOfModel(fromArrayDictionary:dict["A_Key"] as! Array<Dictionary<String, Any>>) 
          self.A_Key_2 = C(withDictionary : dict["A_Key_2"] as! Dictionary<String, Any>)
          self.A_Key_3 = dict["A_Key_3"] as? String ?? ""
          self.A_Key_4 = dict["A_Key_4"] as? Int ?? 0
     }

     class func getArrayOfModel(fromArrayDictionary array:[Dictionary<String, Any>]){
         var tempArray = [B]()

         for dict in array{

             tempArray.append(B(withDictionary: dict))
         }

         return tempArray
     }
}

假设有类B和C以及适当的init方法。与此类似的东西正确编译并且所有迭代都发生而没有任何崩溃,所以我假设这将起作用。

现在我的查询是,这是使用字典在swift中初始化对象的最佳方法吗?由于我担心API会为nil中的任何一个响应"A_Key"值的情况(我会相信会导致崩溃)?

以下正确方式将json映射到swift中的对象? 如果是的话,检查nil的每个值是不是有点乏味?对于所有嵌套模型都有可选的init方法,检查的数量会不断增加吗?

init(withDictionary dict:Dictionary<String, Any>){

      if let a_key_3 = dict["A_Key_3"] as? String{
           self.A_Key_3 = a_key_3
      }
}

0 个答案:

没有答案