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

时间:2015-03-19 19:11:14

标签: json swift uiimageview alamofire swifty-json

我遇到的foursquare api端点要求我将照片前缀,大小和后缀组合在一起以创建可用的图像URL。我试图在" photoURL"目前有效的常数。

我如何检查这个photoURL的所有部分的数据是否存在(使用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!),但我担心如果请求没有返回图像,它会使应用程序崩溃。所以我试图使用if来检查数据是否存在,然后在此语句中设置imageView。

我收到的错误:

"条件绑定中的绑定值必须是可选类型"

以下是错误图片:

enter image description here

2 个答案:

答案 0 :(得分:0)

我没有运行你的代码,但我认为你的代码会崩溃,即使你删除了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;
}

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

答案 1 :(得分:0)

鉴于GET请求将始终返回后缀,如果存在前缀,我只是针对前缀进行测试,并且不需要"组合"它们。

这是我的解决方案:狗(上图)现在是" 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)
    }