2015-12-08 362 views
-3

我是新手,現在只是學習編碼。迅速的代碼,我遇到了一個障礙,似乎無法弄清楚,所以我一直在與斯坦福YouTube頻道一起快速編碼,他們正在做一個計算器。目前我們正試圖獲得雙重價值。快速處理計算器並卡住

@IBOutlet weak var display: UILabel! 

var userIsInTheMiddleOfTypingANumber = false 

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

} 

var operandStack: Array<Double> = Array<Double>() 

@IBAction func enter() { 
    userIsInTheMiddleOfTypingANumber = false 
    operandStack.append(displayValue) 
    print("operandStack = \(operandStack)") 

} 

var displayValue: Double { 
    get { 
     return NSNumberFormatter().numberFromString(display.text!)!.doubleValue 
     // This is my problem and comes back with exc_bad_instruction (code=exc_i387_invop any help would be greatly appreciated on this! thank you for your time! 
    } 
    set { 
     display.text = "\(newValue)" 
     userIsInTheMiddleOfTypingANumber = false 

    } 

} 
+6

如果像你的'NSNumberFormatter()。numberFromString(display.text!)!. doubleValue'這樣的「複雜」表達式崩潰:將它分成單獨的語句來定位問題。請注意,每個使用'!'強制解包都可能導致崩潰。 –

+0

我建議保留https://github.com/m2mtech?tab=repositories作爲參考。用戶的回購由每個Stanford類項目分隔,並且主分支的「README」鏈接到程序的每個階段(包括類版本和作業版本)。快樂的編碼! –

+1

編輯標題以說明你的問題是什麼,而不是你在做什麼。不確定我明白你的問題是什麼。你能否寫下你卡住的地方,你試過的是什麼,問題是什麼? – lukaivicev

回答

0

除了馬丁R:其實你有兩個大問題,都與你的選擇權的解開有關。

首先是這一行:

@IBOutlet weak var display: UILabel! 

的問題是! @IBOutlet鏈接到故事板中的視圖。但是,根據階段,GUI可能是這個display還沒有存在。所以這應該是一個可選的標記?不!然後你的編譯器會抱怨這一行:

return NSNumberFormatter().numberFromString(display.text!)!.doubleValue 

他會抱怨顯示可能不存在,你不能這樣做。你可能會「徹底解決」像這樣的問題:

return NSNumberFormatter().numberFromString(display!.text!)!.doubleValue 

但這要麼失敗,如果display IST沒有準備好或者NSNumberFormatter的不能老是字符串轉換爲數字。你永遠不會知道爲什麼。所以停止使用強制解包。你有不同的工具來解決你的問題。但起初你應該考慮你的問題。你的問題最終並不是每個字符串都可以轉換爲雙精度。所以你必須在某個時候處理這​​個問題。有無數的可能性這樣做。但作爲首發,如果你有一些代碼將崩潰,如果一個可選的(可以爲空值)實際上是零,那麼你可以使用這個模式:

if let thisValueIsNotNil = dontKnowIfItIsNil { 
    // Do something with thisValueIsNotNil - it is save 
} 

編輯:核心問題的機制是相當不錯IMO解釋在這個博客文章中: http://appventure.me/2014/06/13/swift-optionals-made-simple/