####問題場景
開發過程中經常會遇到模型屬性名字跟系統屬性名字相互衝突,那麼麼需要進行替換。class 類的替換相信大家都已經熟悉,下面介紹struct的key的替換以及踩過的坑。
示例代碼如下
///rows 關鍵字跟 系統屬性衝突
struct GJ_CrawlerModel: Codable {
var records:Int? //總共多少條記錄
var page:Int? //當前第幾頁
var sord:String? //排序
var total:Int? //總共頁數
var gj_rows:[gj_data]? //數據數組
/// 使用Codingkey進行替換 所有屬性都要寫進去
enum CodingKeys:String, CodingKey{
case gj_rows = "rows"
case records
case page
case sord
case total
}
}
struct gj_data:Codable{
var test:String? //最小包裝單位
}
####說明
- 模型的數據中rows屬性跟系統的rows屬性衝突
- 將衝突屬性改成自定義屬性
- 使用枚舉的方法繼承Codingkey將struct的所有屬性遍歷一遍所有都需要寫,並且將自定義的關鍵字對應到衝突關鍵字
- decoder json數據 賦值
問題解決
模型賦值比較坑的地方就是swift數據類型不對就會導致整個模型爲nil。
解決辦法,根據真實的json數據對應每個屬性的類型是否正確,在不確定類型的時候就註釋掉屬性然後一個一個的放開如果出現nil則對應的屬性類型不正確。