我正在对我的同事的Swift代码进行代码审查,并希望重构以下代码:
let status = JSON["status"]
if (status != nil && status as! String == "success") {
...
}
可以使用一行代码实现吗?
我只能设法做到:
if let status = JSON["status"] as! String {
if status == "success" {
我希望我能做到:
if let status = JSON["status"] as! String == "success" {
但是它没有编译......有人可以帮忙吗?谢谢。在这种情况下,guard
语句是否有用?
我实际上是Swift的新手。
答案 0 :(得分:3)
if let status = JSON["status"] as? String where status == "success" {
此外,如果您使用swiftyJSON库:
if let status = JSON["status"].string where status == "success" {
编辑:进一步说明
写作时
if let status = JSON["success"] as? String
你将得到一个未包装的字符串,这意味着它总是有一个值,如果你做另一个它是可选的(" nil"),所以当你使用:
if let status = JSON["success"] where status as? String = ""
你将有一个解包的JSON对象,无论字符串是否尚未确定,所以当你想使用某种对象类型(在这种情况下是字符串)时,你立即将它向下转换为"如果让& #34;部分,这样你也可以使用字符串函数,以防你想要一个bool(或其他一些检查)。
在打开可选值之后,我从未真正下载,但我想象它可能会出错,因为你仍然有一个可选的对象,可能是零,你真的想在它之前有一个值。
答案 1 :(得分:2)
以防其他人遇到这个没有OP特定用例的问题(在以前的swift版本中没有尝试过)。你可以用逗号分隔你的展开和条件:
public static void outputEight()
{
System.out.println(" ");
String zQ = "Q R S T U V W X Y Z";
for(int alphz=zQ.length()-1; alphz>=0; alphz--)
{
for(char alph = 'A'; alph <= 'L'; alph++)
{
System.out.print(zQ.charAt(alphz) + alph);
if(alph== 'L')
{
System.out.println("");
}
}
}
}
答案 2 :(得分:1)
您不需要在您的案例中使用可选绑定,只需:
if JSON["status"] as? String == "success" {
// ...
}
JSON["status"] as? String
的值是可选字符串,
并且可以直接与非可选字符串进行比较。