2017-07-08 50 views
-3

我有一个函数,检查用户输入的值是否为零(配偶为双倍)。所有的变量都在函数内声明。 现在,我试图从函数中获取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!

+1

你究竟如何使用return语句请分享片段 – VIPER

+0

我说我试过但没有成功,所以我把它抹去了。 – APRULE

+0

如果你不显示你所做的那些工作没有成功,你认为人们如何帮助你解决不起作用的问题? – pjs

回答

2

您的发布代码的主要问题是,您不使用在numbers函数中调用numbers()的结果。你也有强制解开nil值会导致崩溃的问题。

注意:不要在操场上运行。只能在命令行应用程序中使用它。

它应该是(忽略力展开问题现在):

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! 
    } 
} 

但递归是不是真的是这样的一个很好的解决方案。使用一个简单的循环。

func numbers() -> Double { 
    while true { 
     print("enter plate height:") 
     if let text = readLine() { 
      if let num = Double(text) { 
       print("good! \(num)") 
       return num 
      } else { 
       print("Invalid number: \(text)") 
      } 
     } 
    } 
} 
+0

你能解释一下为什么我必须在第一个例子中“返回数字()”吗? – APRULE

+0

因为你想返回调用'numbers'函数的值。你的代码忽略了它获得的价值,并且为了返回0而跌到了底部。 – rmaddy

+0

所以如果我这样做,我可以删除最后的返回语句(“return 0.0”)?另外,如果我这样做,我怎么能确定它不返回零? – APRULE

-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。您现在知道的功能之外,没有输入任何内容。