我有两个文本字段来插入数字,我试图找出如果用户只是在一个或两个文本字段中插入一个值,它将如何解决。我尝试用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.
}
}
答案 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
以确保您的期权有价值。