我最近开始学习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”时我得到一个异常。
这可以简单地写出来还是只是语言的行为?
感谢
答案 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()