2016-11-11 17 views
0


我對Swift非常陌生,通過使用「Swift應用程序開發」書籍進行學習。
你能否檢查下面的代碼 - 它不工作,我不明白爲什麼。
使用Swift進行應用程序開發 - 第13課 - 練習:「isBelow13」

import UIKit 

func isBelow13(number: Int) -> Bool { 

let isBelow: Bool = false 

    if number < 13 { 
     let isBelow = true 
    } else { 
     let isBelow = false 
    } 
    return isBelow 
} 

isBelow13(number: 11) // returns false, should return true 
isBelow13(number: 14) // returns false 


Cheerio!

+2

如果你不知道爲什麼你的代碼無法按預期工作:將它放入*編譯的項目*而不是Playground,然後使用*調試器*設置斷點,單步,檢查變量。 *瞭解*發現錯誤。 –

回答

1

您將isBelow定義爲false,然後在if語句中定義一個名爲isBelow的新常量。這個新常數與上面的常數名稱相同,但實際上完全不同。當你在if語句之外時,你在if語句內創建的語句不再存在,它只返回你最初創建的語句。你實際上並沒有改變你最初設定的第一個isBelow。

你實際上試圖做可以完成這樣的:

func isBelow13(number: Int) -> Bool { 

    var isBelow: Bool = false 

    if number < 13 { 
     isBelow = true 
    } else { 
     isBelow = false 
    } 
    return isBelow 
} 

isBelow13(number: 11) // returns true 
isBelow13(number: 14) // returns false 

這樣,你正在創建一個可以被重新分配的「變種」,而不是「讓」,然後你是一個變量基於if語句條件更改該變量的值。然後你要返回改變的價值。合理?

一個同上面的代碼更簡潔的版本是這樣的:(從@MartinR在評論)

func isBelow13(number: Int) -> Bool { 
    return number < 13 
} 

number < 13返回一個布爾值,所以你可以只返回一個表達式的結果表達從你的功能。

+0

你不必預先賦值,'let isBelow:Bool'就足夠了。 - 或者只是「返回號碼<13」。 –

+0

@MartinR非常真實!許多方式做同樣的事情,我只是想盡可能地保持它與原始代碼的接近程度,所以它不會讓OP感到困惑。 –

相關問題