如何使用 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)
}
我要访问的四方 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)
}