任何oneline代码实现“if let”然后比较(例如字符串比较)?

时间:2016-03-02 08:39:41

标签: swift if-statement

我正在对我的同事的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的新手。

3 个答案:

答案 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)

Swift 3

以防其他人遇到这个没有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的值是可选字符串, 并且可以直接与非可选字符串进行比较。