如何使用 if let 语句检查 JSON 数据是否存在于多个常量中?

How can I use an if let statement to check if JSON data is present in multiple constants?

我要访问的四方 api 端点要求我将照片前缀、大小和后缀组合在一起以创建可用图像 URL。我正在尝试在当前可用的 "photoURL" 常量中执行此操作。

我如何检查这张照片URL 的所有部分的数据是否存在(使用 if let),同时使用 Haneke 将变量组合在一起以从 URL 设置 venueImageView ?

这是我的代码:

func bindData() {
    let ratingSignals = self.dog?["venue"]["ratingSignals"].stringValue

    let photoURLPrefix = self.dog?["venue"]["featuredPhotos"]["items"][0]["prefix"].stringValue
    let photoURLSuffix = self.dog?["venue"]["featuredPhotos"]["items"][0]["suffix"].stringValue
    let photoURL = photoURLPrefix! + "original" + photoURLSuffix!
    let venuePhotoURL = NSURL(string: photoURL)

    println("photo url prefix is \(photoURLPrefix)")
    println("photo url suffix is \(photoURLSuffix)")
    println(photoURL)

    self.openUntilLabel.text = self.dog?["venue"]["hours"]["status"].stringValue
    self.addressLabel.text = self.dog?["venue"]["location"]["address"].stringValue
    self.titleLabel.text = self.dog?["venue"]["name"].stringValue
    self.ratingsLabel.text = "Based on \(ratingSignals) ratings"
    self.ratingImageView.image = UIImage(named:"Score8-5")!

    if let photoURL = photoURLPrefix! + "original" + photoURLSuffix!{
        let url = NSURL(string: photoURL)
        venueImageView.hnk_setImageFromURL(url!)
    }

我注释掉了目前有效的 self.venueImageView.hnk_setImageFromURL(venuePhotoURL!),但我担心如果请求没有 return 图片,它会使应用程序崩溃。所以我尝试使用 if let 来检查数据是否存在,然后在此语句中设置 imageView。

我得到的错误:

"Bound value in a conditional binding must be of optional type"

这是错误的图像:

我没有 运行 你的代码,但我认为你的代码会崩溃,即使你删除了 if 条件并且 if 完全阻止以防返回任何数据。

您应该像这样验证您的回复;

let photoURLPrefix? = self.dog?["venue"]["featuredPhotos"]["items"][0]["prefix"] as String?
let photoURLSuffix? = self.dog?["venue"]["featuredPhotos"]["items"][0]["suffix"] as String?
if (photoURLPrefix == nil || photoURLSuffix == nil)
{
    //Do not proceed
    return;
}

我不知道您从狗对象中检索数据的方式是否有效,但重要的是要使用的可选标志。

鉴于如果存在前缀,GET 请求总是 return 后缀,我只是针对前缀进行了测试,不需要 "combine" 它们。

这是我的解决方案:狗(上图)现在是 "pin"

if let photoURLPrefix = self.pin?["venue"]["featuredPhotos"]["items"][0]["prefix"].stringValue {
        let photoURLSuffix = self.pin?["venue"]["featuredPhotos"]["items"][0]["suffix"].stringValue
        let photoURL = photoURLPrefix + "original" + photoURLSuffix!
        let venuePhotoURL = NSURL(string: photoURL)
        self.venueImageView.hnk_setImageFromURL(venuePhotoURL!)
        println("photo url prefix is \(photoURLPrefix)")
        println("photo url suffix is \(photoURLSuffix)")
        println(photoURL)
    }