2015-03-22 2 views
0

У меня есть два текстовых поля для вставки чисел, я пытаюсь выяснить, как это можно сработать, если пользователь просто вставляет одно значение в одно из текстовых полей или два. Я попытался сделать это с помощью утверждений if, но это не сработает. Похоже, что у меня есть ошибка, когда в коде возникает проблема: Неустранимая ошибка: неожиданно найден nil во время разворачивания необязательного значения Я был бы рад за какую-то помощь - как вы можете видеть, я начинаю стремительную кодировку. Спасибо, что так далеко!2 Текстовые поля необязательные вставки в одном или обоих

@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

Одним из способов обработки безопасно является УСТРОЙСТВА 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, чтобы убедиться, что ваши опции имеют значения.

+0

благодарит за вашу помощь, но, как вы можете видеть в моей последней инструкции if - когда я получаю оба поля от пользователя, вы должны быть разными, как я могу это исправить? – Hardi

Смежные вопросы