Swift2 Swift 2可选保护绳

Swift2 Swift 2可选保护绳,swift2,guard-statement,Swift2,Guard Statement,我正在处理swift 2.0中的一个问题 我从一个API中得到一个json文件,并试图从中打开一些字符串 有时,这个json会给我一个带有场地街道名称的字符串,但有时不会。 所以当我尝试这个的时候 var street = arrRes[indexPath.row]["venueLocation"]!["street"] as! String 它总是崩溃我的应用程序,说它是零。当我评论它时,我的应用程序运行得很好,但它没有显示街道。 您知道如何打开字符串而不出现nil问题吗 如果尝试此代码

我正在处理swift 2.0中的一个问题

我从一个API中得到一个json文件,并试图从中打开一些字符串

有时,这个json会给我一个带有场地街道名称的字符串,但有时不会。 所以当我尝试这个的时候

var street = arrRes[indexPath.row]["venueLocation"]!["street"] as! String 
它总是崩溃我的应用程序,说它是零。当我评论它时,我的应用程序运行得很好,但它没有显示街道。 您知道如何打开字符串而不出现
nil
问题吗

如果尝试此代码

var street = arrRes[indexPath.row]["venueLocation"]!["street"] as! String 

if street == "" {
   street = "n/a"
}

但是它也失败了。

只要你用
强制展开它如果值为零,则有崩溃的风险。相反,您可以尝试像这样展开:

guard let venueDictionary = arrRes[indexPath.row]["venueLocation"] as? [String:AnyObject], let street = venueDictionary["street"] as? String else {
   //You don't have a street string, fail gracefully 
}
print(street)//Now you can use street safely as a string here

任何时候您都可以使用
强制展开如果值为零,则有崩溃的风险。相反,您可以尝试像这样展开:

guard let venueDictionary = arrRes[indexPath.row]["venueLocation"] as? [String:AnyObject], let street = venueDictionary["street"] as? String else {
   //You don't have a street string, fail gracefully 
}
print(street)//Now you can use street safely as a string here

我必须在
else
中写入
return
??@KwnstantinosNatsios Yes,或
fatalError()
break
或退出作用域的内容,这就是
guard
语句所做的。如果不想提前退出或使用
guard
,则可以将其更改为:
如果让venueDictionary=arrRes[indexPath.row][“venueLocation”]as?[String:AnyObject],让street=venueDictionary[“street”]as?String{print(street)//现在您可以在这里安全地将street用作字符串}
然后我尝试将此变量发送到另一个视图控制器。但是在某个具有
nil
街道的单元格中,它不允许我进入下一个视图控制器。。。但是对于其他具有正常街道的单元格,我没有任何问题。@KwnstantinosNatsios类似这样的情况如何:
如果让venueDictionary=arrRes[indexPath.row][“venueLocation”]as?[String:AnyObject],让street=venueDictionary[“street”]as?字符串{otherViewController.streetText=street}else{otherViewController.streetText=“”}
@KwnstantinosNatsios Great!:)我必须在
else
中写入
return
??@KwnstantinosNatsios Yes,或
fatalError()
break
或退出作用域的内容,这就是
guard
语句所做的。如果不想提前退出或使用
guard
,则可以将其更改为:
如果让venueDictionary=arrRes[indexPath.row][“venueLocation”]as?[String:AnyObject],让street=venueDictionary[“street”]as?String{print(street)//现在您可以在这里安全地将street用作字符串}
然后我尝试将此变量发送到另一个视图控制器。但是在某个具有
nil
街道的单元格中,它不允许我进入下一个视图控制器。。。但是对于其他具有正常街道的单元格,我没有任何问题。@KwnstantinosNatsios类似这样的情况如何:
如果让venueDictionary=arrRes[indexPath.row][“venueLocation”]as?[String:AnyObject],让street=venueDictionary[“street”]as?字符串{otherViewController.streetText=street}else{otherViewController.streetText=“”}
@KwnstantinosNatsios Great!:)