2015-08-10 1 views
1

Я пытаюсь самостоятельно пройти курс CS193P. Я по заданию 2 курса и части задания прошу меня сделать следующее:Переменная UILabel должна быть необязательной Double, но я не хочу, чтобы метка отображалась необязательно (valueOfNumber)

«Изменение вычисляемого переменным экземпляра displayValue быть необязательным двойным, а не двойной»

я был в состоянии измените значение displayValue как необязательный Double, но теперь мой UILabel, который показывает displayValue, теперь отобразит необязательное значение вместо двойного значения (что имеет смысл).

Пример:

5 (нажмите ввод) будет отображать значение факультативным (5.0) в UILabel.

Вот что я пробовал:

Я определил, что result и displayValue! вернется в два раза.

Я попытался изменить display.text = result на display!.text! = result, но это не исправило проблему.

Вот фрагмент моего кода, я думаю, вам больше не нужно больше, но, пожалуйста, прокомментируйте, если вы думаете, что я должен показать что-то еще!

P.S. имя дисплея display

@IBAction func enter() { 
    if let result = brain.pushOperand(displayValue!) { 
     displayValue = result 
    } else { 
     displayValue = 0 
    } 
} 

var displayValue: Double? { 
    get { 
     return NSNumberFormatter().numberFromString(display.text!)!.doubleValue 
    } 
    set{ 
     display!.text! = "\(newValue)"  //display is the UILabel 
    } 
+1

Проблема в том, что 'newValue' является необязательным, который должен быть развернут при создании этикетки. 'display.text =" \ (newValue!) "'. Конечно, это приведет к сбою, если 'displayValue' получит значение' nil', поэтому вы должны рассмотреть, как вы хотите это обработать. – vacawama

+0

Да - я планировал использовать «if let», чтобы обрабатывать этот случай nil. Я просто хотел выяснить, как правильно отобразить его. EDIT: Извините. Просто увидел, что вы добавили восклицательный знак в «\ newValue», который исправил мою проблему. Спасибо за совет – Sami

+0

@vacawama любые предложения о том, как обращаться с делом 'nil'? Я продолжаю рушиться :(Профессор в видео первоначально имел бы «displayValue» равным нулю в случае «nil», но он сказал, что это плохой способ сделать это, потому что он действительно должен равняться «nil» – Sami

ответ

3

Я считаю, что дисплей должен быть пустым, если, например, стек не может быть оценена, чтобы дать результат.

Таким образом, вы можете просто использовать

var displayValue: Double? { 
    get { return NSNumberFormatter().numberFromString(display.text!)?.doubleValue } 
    set { if newValue != nil { display.text = "\(newValue!)" } 
      else { display.text = " " } 
    } 
} 

А потом "войти"

@IBAction func enter() { 
    if let dV = displayValue { 
     brain.pushOperand(dV) 
     displayValue = brain.evaluate() 
    } 
    userIsInTheMiddleOfTypingANumber = false 
} 

Это решение работает для меня. Я тоже самостоятельно провожу этот курс самостоятельно. Это сложно, и я должен слушать лекции много раз :-)

Jacki

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