我有一个函数检查用户输入的值是否为nil(配偶为double)。所有变量都在函数内声明。 现在,我试图从函数中获取var并在我的其他代码中使用它(在函数外部)。我试图用返回选项做它,但它显示我的错误。 我在谷歌寻找它,因为我看到那里我不确定我是否能真正做到这一点。 有没有人知道我该如何解决? 这是我的代码:
func numbers() -> Double {
print("enter plate heigh")
let num1 = Double(readLine()!)
if checkIfNil(value1: num1){
print("plaese enter valid heigh")
numbers()
}
else{
let x = num1
print("good! \(num1)")
return x!
}
return 0.0
}
let platHeigh = numbers()
print("is: \(platHeigh)")
TNX!
答案 0 :(得分:2)
您发布的代码的主要问题是您没有在sdk
函数中使用调用numbers()
的结果。强制解包nil值也会导致崩溃。
注意:请勿在操场上运行此操作。仅在命令行应用程序中使用它。
它应该是(暂时忽略强制解缠问题):
numbers
但递归并不是一个很好的解决方案。使用简单的循环。
func numbers() -> Double {
print("enter plate heigh")
let num1 = Double(readLine()!)
if checkIfNil(value1: num1){
print("plaese enter valid heigh")
return numbers() // you need to return here
}
else{
let x = num1
print("good! \(num1)")
return x!
}
}
答案 1 :(得分:-1)
在这一行:
let num1 = Double(readLine()!)
如果readLine()
返回nil,则会出现崩溃。因为您使用!
强制展开它。
更好的方法是使用if let
statement:
var input: Double? = nil
func numbers() -> Double? {
if let num1 = input {
print("good! \(num1)")
return num1
} else {
print("plaese enter valid heigh")
return nil
}
}
在此功能中,num1仅为您的字段指定值(如果不是nil )。然后它返回。
否则会打印错误消息并返回nil。在您的功能之外,您现在知道,没有输入任何内容。