2017-08-23 115 views
-1

我試圖構建一個if/then基本應用程序,該按鈕被按下後,將在標籤中的.swift文件中顯示輸入值的聯邦所得稅。我打算以後讓代碼更加有用,但是想測試我的代碼。唯一的問題是,當我按下按鈕時,它顯示0.0,當它應該在40左右......有人知道我在做什麼錯了嗎?Else If Statement Swift

@IBOutlet weak var Label: UILabel! 
@IBAction func ButtonClicked(_ sender: Any) { 
    var hourly:Float = 8.00 
    var hours:Float = 61.75 
    var exemptions:Float = 1.00 
    var deductions:Float = 95.80 
    var allowances:Float = (exemptions * deductions) 
    var gross:Float = (hourly * hours) 
    var taxable:Float = (gross - allowances) 
    if taxable >= 17529 { 
     var fedIncome = ((taxable * 0.396) + 5062.69)} 
    else if taxable < 17529 && taxable >= 17458 { 
     var fedIncome = ((taxable * 0.35) + 5037.84)} 
    else if taxable < 17458 && taxable >= 8081 { 
     var fedIncome = ((taxable * 0.33) + 1943.43)} 
    else if taxable < 8081 && taxable >= 3925 { 
     var fedIncome = ((taxable * 0.28) + 779.75)} 
    else if taxable < 3925 && taxable >= 1677 { 
     var fedIncome = ((taxable * 0.25) + 217.75)} 
    else if taxable < 1677 && taxable >= 484 { 
     var fedIncome = ((taxable * 0.15) + 38.80)} 
    else if taxable < 484 && taxable >= 96 { 
     var fedIncome = (taxable * 0.1)} 
    else { 
     var fedIncome:Float = 0.0} 
    Label.text = ("\(fedIncome)") 
} 
+0

你代碼wou ld使用帶範圍的'switch'語句而不是'if' /'else if' /'else' block – Alexander

回答

1

您不應該在if else塊內創建變量。

嘗試將聲明移至if之外並更改if else塊內的值。

1

所有分配給fedIncome的行都分配給您在if塊範圍內定義的本地var。只要該塊結束,fedIncome變量將被刪除,因此不會被打印。

如上所示,您的示例看起來好像根本不應該編譯。如果正在編譯,我的假設是您的課程在其他地方定義了fedIncome屬性,並且您的print語句正在打印,而不是您剛剛計算的值。

反正聲明fedIncomeif語句,擺脫if報表範圍內var語句,你應該解決您的問題。您也可以考慮將var s轉換爲let,因爲您在設置它們後不會改變它們。

0

這是因爲你在每個if/else語句中聲明聯邦收入爲局部變量。嘗試是這樣的:

@IBAction func ButtonClicked(_ sender: Any) { 
    let hourly = 9.00 
    let hours = 61.75 
    let exemptions = 1.00 
    let deductions = 95.80 
    let allowances = (exemptions * deductions) 
    let gross = (hourly * hours) 
    let taxable = (gross - allowances) 
    var fedIncome:Float = 0.0 // default value 
    if taxable >= 17529 { 
     fedIncome = ((taxable * 0.396) + 5062.69)} 
    else if taxable < 17529 && taxable >= 17458 { 
     fedIncome = ((taxable * 0.35) + 5037.84)} 
    else if taxable < 17458 && taxable >= 8081 { 
     fedIncome = ((taxable * 0.33) + 1943.43)} 
    else if taxable < 8081 && taxable >= 3925 { 
     fedIncome = ((taxable * 0.28) + 779.75)} 
    else if taxable < 3925 && taxable >= 1677 { 
     fedIncome = ((taxable * 0.25) + 217.75)} 
    else if taxable < 1677 && taxable >= 484 { 
     fedIncome = ((taxable * 0.15) + 38.80)} 
    else if taxable < 484 && taxable >= 96 { 
     fedIncome = (taxable * 0.1)} 
    } 

    Label.text = ("\(fedIncome)") 
} 

注意fedIncome在當地的功能,和其他變量的頂部聲明,然後每個if/else語句只是更新它相應...

+0

您應該用'let'而不是'var'聲明'fedIncome'。 – rmaddy

+0

@rmaddy如果你想像上面顯示的那樣更新它... – Asleepace

+0

如果你將聲明改爲'let fedIncome:Float',那麼它就會工作。 – rmaddy

0

放置var fedIncome沿與變量的其餘部分之前,你進入如果語句..所以當在任的條件下,如果報表是真實的,適用於fedIncome的變化不會被重置,一旦你退出如果