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

Swift2 Swift 2将可选字符串返回值转换为int,swift2,optional,Swift2,Optional,我最近开始学习swift 2,因为我没有使用swift 1,所以我正试着让我的头脑了解选项和展开。我一直在尝试做一个简单的例子,将可选字符串转换为int var numbers: [String] = ["1","2","3","4"]; func findNumber (num:String, numbers:[String]) -> String?{ for tempNum in numbers { if(tempNum == num){

我最近开始学习swift 2,因为我没有使用swift 1,所以我正试着让我的头脑了解选项和展开。我一直在尝试做一个简单的例子,将可选字符串转换为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")
}
看了之后,我设法让第一个if语句工作,但这似乎是额外的一步-创建一个变量来保存可选结果,然后将其传递给findNumber函数。为什么不可能做第二个例子中更简洁的事情?当然,在这两个例子中,传递给Int函数的值都是nil?如果我用!打开返回,只要它是一个有效的数字,我就会得到正确的响应,但使用无效输入(如5)时会出现异常

这是否可以写得更简洁,或者这仅仅是语言的行为


谢谢

事实上你是对的,这就是为什么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()

您好,感谢您的回复,我在这里看到的问题是使用返回值将字符串转换为Int,在您的回复中,您没有进行任何转换,我很感激这只是一个打印,因此不需要进行转换,但它只是提供了一个简单的示例,在这种情况下“if let num=findNumber5,《数字:数字》对我来说足够好和简洁。在这个例子中,我要问的是为什么可以将's'传递给'Int'函数,其中's'是'findNumber'函数的返回值,但是我不能将'findNumber'直接传递给'Int'并得到相同的结果。在这种情况下,这是正确/安全的展开方法。