Swift 2将可选字符串返回值转换为int

时间:2015-10-08 08:33:07

标签: swift2 optional

我最近开始学习swift 2(没有使用swift 1),并试图让我的头围绕选项和展开。我一直在尝试做一个将可选String转换为int的简单示例。我的例子如下:

var numbers: [String] = ["1","2","3","4"];

func findNumber (num:String, numbers:[String]) -> String?{
    for tempNum in numbers {
        if(tempNum == num){
            return tempNum;
        }
    }
    return nil;
}


if let s = findNumber("5", numbers: numbers), num = Int(s){
    print("found")
}else{
    print("not found")
}

if let num = Int(findNumber("5", numbers: numbers)?){
    print("found")
}else{
    print("not found")
}

在查看How do you convert optional text input to Int in Swift 2, Xcode 7 beta using if let - toInt does not work后,我设法让第一个if语句工作,但这似乎是一个额外的步骤 - 创建一个变量来保存可选结果,然后将其传递给findNumber函数。为什么不能像第二个例子那样做更简洁的事情?当然在这两个例子中,传递给Int()函数的值是nil?如果我用!打开返回,只要它是一个有效数字我得到正确的响应,但是当使用无效输入如“5”时我得到一个异常。

这可以简单地写出来还是只是语言的行为?

感谢

1 个答案:

答案 0 :(得分:0)

实际上你是对的,这就是swift 2.0中引入guard语法的原因。

考虑下面我的例子,我认为这种方式更具可读性。

var numbers: [String] = ["1","2","3","4"];

func findNumber (num:String, numbers:[String]) -> String?{
    for tempNum in numbers {
        if(tempNum == num){
            return tempNum;
        }
    }
    return nil;
}

func isFound() {
    let s = findNumber("5", numbers: numbers)
    guard s != nil else {
        print("not found")
        return
    }
    // Confidently unwrap s
    print(s!)

    print("found")
}

isFound()