2个文本框可选插入一个或两个

时间:2015-03-22 18:07:55

标签: xcode swift

我有两个文本字段来插入数字,我试图找出如果用户只是在一个或两个文本字段中插入一个值,它将如何解决。我尝试用if语句来做,但这不起作用。看起来我也错了一些错误在代码中我得到了问题:致命错误:在展开可选值时意外发现nil 我会很高兴得到一些帮助 - 你可以看到我是一个初学者在快速编码。非常感谢!

@IBOutlet var budgetShow: UILabel!
@IBOutlet var restShow: UILabel!
@IBOutlet var daysShow: UILabel!
@IBOutlet var dayssShow: UILabel!
@IBOutlet var inputDays: UITextField!
@IBOutlet var inputBudget: UITextField!
@IBAction func findResult(sender: AnyObject) {

    var inputBudgetInt = inputBudget.text.toInt()

    var inputDaysInt = inputDays.text.toInt()

    var dailyRate = 85.50

    if inputDays != nil {

        var days = Double(inputBudgetInt!) / dailyRate

        var daysCosts = dailyRate * days

        var daysShow = Int(days)

        var costsShow = Int(daysCosts)

        dayssShow.text = "For \(costsShow) you can stay \(daysShow) Days."

    }

    if inputBudget != nil {    
        var budget = dailyRate / Double(inputBudgetInt!)

        var budgetShow = Int(budget)

        daysShow.text = "You need /(budgetShow)"
    }

    var daysBudget = Double(inputBudgetInt!) / Double(inputDaysInt!)
    var show = daysBudget - dailyRate
    var costs = Double(inputDaysInt!) * dailyRate
    var rest = Double(inputBudgetInt!) - costs
    var could = Double(inputBudgetInt!) / dailyRate
    var couldShow = Int(could)
    var restedShow = Int(rest)
    var costShow = Int(costs)
    var dayShow = Int(inputDaysInt!)

    if show > 0  {         
        budgetShow.text = "For \(dayShow) Days you need \(costShow) €"
        restShow.text = "Rest Budget after \(dayShow) Days is \(restedShow) €"
        daysShow.text = "With your budget you could stay up to \(couldShow) days" 
    } else {   
        budgetShow.text = "Change your budget or days"
    }
}

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

}

1 个答案:

答案 0 :(得分:0)

安全处理选项的一种方法是if let,如下所示:

if let inputBudgetInt = inputBudgetInt {
  // safely use it without need for "!" or "?"
  var days = Double(inputBudgetInt) / dailyRate
}

这基本上意味着“如果此可选项具有值,请将其解包并在此处使用”。

我喜欢保持个人名称相同,如果需要,可以使用其他名称。

另一种方法是使用“?”,特别适合链接。如果你有一个单元格的引用,例如:

cell.textField?.text = "Foo"

如果textField(可选)没有值,则该行默默无效。

你应该避免“!”尽可能多,因为它很容易导致崩溃。只有当你100%确定它有价值时,你应该冒风险。作为一个初学者,我会坚持if let以确保您的期权有价值。