2015-12-24 3 views
0

Я следую за Стэнфордом Видео для iOS разработки, и я использую Xcode 7 с Swift 2. Я написал код из видео линии за строкой, однако я продолжаю получать сообщение об ошибке.Swift 2 Преобразование из строки в номер

import UIKit 

class ViewController: UIViewController 
{ 

@IBOutlet weak var display: UILabel! 

var userIsTyping = false 

@IBAction func AppendDigit(sender: UIButton) { 
    let digit = sender.currentTitle! 
    if userIsTyping { 
     display.text = display.text! + digit 
    } else { 
     display.text = digit 
     userIsTyping = true 
    } 
} 

var operandStack = Array<Double>() 

@IBAction func enter() { 
    userIsTyping = false 
    operandStack.append(displayValue) 
} 

var displayValue: Double { 
    get{ 
     return NSNumberFormatter().numberFromString(display.text!)!.doubleValue 
    } 
    set (newValue){ 
     display.text = "\(newValue)" 
     userIsTyping = false 

    } 
} 


} 

На линии, где я вернусь

NumberFormatter().numberFromString(display.text!)!.doubleValue

Я получаю ошибку

Тема 1: EXC_BAD_INSTRUCTION (код = EXC_1386_INVOP, субкодовое = 0х0)

+1

Ваш ярлык 'display' равен нулю или содержит строку с номерами. – truongky

ответ

1

Преобразование может потерпеть неудачу. Результат может быть равен нулю. «!» означает «компилятор, я на 100% уверен, что результат никогда не будет никчемным, поэтому, если он когда-либо ник, тогда, пожалуйста, сбой». Угадайте, что, иногда это ноль.

Используйте "if let".

PS. Я думаю, что очень, очень нездорово взять элементы пользовательского интерфейса (например, название кнопки) и предположить, что они имеют определенные значения.

+0

Действительно. Существует эта вещь, называемая «санация/валидация пользователя». –

0

Вы гораздо лучше подставляя, что оператор возврата с гораздо проще:

return Double(display.text!)! 
+0

Я пытался сделать это раньше, но это не сработало. – user3916398

0

пусть Number = (NSNumberFormatter() numberFromString (xtxt.text), как Double.!)

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