2017-07-08 48 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。您現在知道的功能之外,沒有輸入任何內容。