2017-08-23 74 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的变化不会被重置,一旦你退出如果