json - 如何在便利初始化程序中检查 Swift 中的 JSON nil

标签 json swift alamofire

我从另一个开发者那里继承了一个 Swift 项目。我们正在添加一个 imageUrl,它现在可以成为项目的一部分 从 JSON api 返回。我们正在退回使用的 Alamofire。

一个问题是我们的 instore_image_url_200w 可以有一个空值,它 成为项目的 imageUrl。我想我有两个问题。看起来我想让 imageUrl 成为可选字符串。它是否正确?如果是,什么 初始化期间处理 nil 值的正确方法是什么?我想检查 item.imageUrl

显示是否为 nil
  var items = [Item]()
  Alamofire.request(URL(string: "https://www.example.com/api/v1/metro_areas/1")!, method: .get).validate().responseJSON { (response) -> Void in
    guard let value = response.result.value as? [String: Any],
      let rows = value["items"] as? [[String: Any]] else {
        print("Malformed data received from fetchAllRooms service")
        return
    }
    for row in rows {
      let item = Item(data: row)
      if (item.imageUrl is String){
        print("here is item.imageUrl: \(item.imageUrl!)")
      }
      items.append(item)

    }
}

和模型:

class Item {
  var name: String
  var imageUrl: String?

  init(name: String, imageUrl: String) {

    self.name = name
    self.imageUrl = imageUrl
  }

  convenience init(data: [String:Any]) {
    let name = data["header"] as? String
    let imageUrl = data["instore_image_url_200w"] as! String?
    self.init(name: name!,
              imageUrl: imageUrl)
  }
}

最佳答案

是的,imageUrl 将是一个可选字符串,因为它可能存在也可能不存在于 JSON 数据中。一点 - 您当前的 imageUrl 模型初始化程序代码为:

let imageUrl = data["instore_image_url_200w"] as! String?

就我个人而言,我认为将其设置为:

let imageUrl = data["instore_image_url_200w"] as? String

关于你的第二个问题,如果你有上面的初始化,nil 值将在初始化期间自动处理,因为 imageUrl 值是可选的,所以它要么被设置为 nil(在nil 值)或具有实际的字符串值。

当然,当您使用 imageUrl 时,您总是必须检查它是否为 nil 或是否有值,但您已经提到您会在显示时执行此操作.

关于json - 如何在便利初始化程序中检查 Swift 中的 JSON nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42915989/

相关文章:

json - serde_json::Value 以外类型的 Serde Stream Deserializer

Python 将 xml 转换为 json 需要一个类似字节的对象

ios - 如何将不同位置的相同 uiview 倍数添加到 UIViewController?

swift - 无法使用 cocoaPods 下载库

java - Android java从url解析json到对象列表

java - 适用于 Jackson 中任何列表的自定义解串器

swift - 在 Swift playground 中使用 MapKit 显示 map 以快速查看?

ios - 带有 XML 响应和正文的 SOAP 请求 swift 3, Alamofire

iOS 9 Alamofire 从不加载图像

swift - postman 和 alamofire 之间的响应时间