2017-05-08 32 views
-1

我得到了來自服務器的圖像Json,我創建了一個模式類&,在該模式下我宣佈圖像爲該類的成員。如何在swift中進行安全的json解析?

class SomeClass: NSObject { 

    var objImages:[Images] = [Images]() 


} 

圖像作爲類

class Images { 

    var thumbImage:String = "" 
    var fullImage:String = "" 

    init(dictionary:NSDictionary){ 

     fullImage = dictionary["thumb"] as? String ?? "" 
     thumbImage = dictionary["full_url"] as? String ?? "" 
    } 
    init() { 

    } 

} 

解析JSON數據

if let arrImg = dictionary["images"] { 

     for value in arrImg as! NSArray { 
     let tempImage:Images = Images(dictionary: value as! NSDictionary) 
     recipeImages.append(tempImage) 
     } 
    } 
下面

是josn響應

{ "images": [ 
     { 
     "thumb": "https://mysevrer.com/v0/b/a.png」, 
     "full_url": "https://mysevrer.com/v0/b/b.png" 
     }, 
     { 
     "thumb": "https://mysevrer.com/v0/b/a.png」", 
     "full_url": "https://mysevrer.com/v0/b/b.png」" 
     } 
    ] 
} 

請解析迴應是否安全?

  • 如果我don'tget圖像陣列
    如果這是,如果我沒有得到的「拇指」 &「滿」作爲鍵
+0

如果您對服務器數據負責,則可以控制安全。確保始終發送了兩個鍵/值對,然後您可以強制展開值。使用Swift'[String:String]'而不是鍵入未指定的'NSDictionary'來擺脫類型轉換 – vadian

回答

1

我不知道什麼是什麼你的意思是,但這將返回一個可選的圖像實例。所以如果字典不包含這些鍵中的一個或兩個,它將返回nil。

class Images { 

    var thumbImage:String 

    var fullImage:String 

    init?(dictionary:Dictionary<String,String>){ 

     guard let image = dictionary["thumb"] else { return nil } 

     guard let thumb = dictionary["full_url"] else { return nil } 

     self.fullImage = image 

     self.thumbImage = thumb 
    } 
} 

對於數組的解析部分。

guard let imagesArray = dictionary["images"] as? Array<Dictionary<String,String>> else { return } 

for dict in imagesArray { 

    guard let images = Images(dictionary: dict) else { continue } 

    recipeImages.append(images) 
}