2017-06-14 36 views
1
var displayValue: Double { 
    get { 
     return Double(display.text!)! 
    } 

    set { 
     display.text = formatCurrency(value: newValue) 
    } 
} 

func formatCurrency(value: Double) -> String { 
    let formatter = NumberFormatter() 
    formatter.numberStyle = .decimal 
    formatter.alwaysShowsDecimalSeparator = false 
    formatter.decimalSeparator = "," 
    formatter.maximumFractionDigits = 2; 
    formatter.locale = Locale(identifier: Locale.current.identifier) 
    let result = formatter.string(from: value as NSNumber); 
    return result!; 
} 

private var brain = CalculatorBrain() 

@IBAction func touchDigit(_ sender: UIButton) { 
    let digit = sender.currentTitle! 
    if userIsInTheMiddleOfTyping { 
     let textCurrentlyInDisplay = display.text! 
     display.text = textCurrentlyInDisplay + digit 
    } else { 
     display.text = digit 
     userIsInTheMiddleOfTyping = true 
    } 
} 

每當我觸摸我的按鈕,標籤不會被更新。 我想使「顯示標籤」好看,所以我使用的NumberFormatter和我設置如何格式化我的號碼?

我已經試過這

let result = String(displayValue) + formatter.string(from: value as NSNumber)!; 
我formatCurreny功能

,但行爲對我的格式屬性我的應用程序不允許我按+, - (或操作鍵)

回答

0

因爲您在設置器中爲displayValue格式化display標籤,但您從未設置過該屬性。

如果你希望你的計算器的顯示屏看起來「漂亮」,你需要管理3個變量:

  • 格式化文本,您可以使用它追加數字顯示
  • 格式化文本,它要顯示與小數點分隔符等
  • displayValue標籤上,你用你的CalculatorBrain
  • 一個

您可以設計圍繞無格式文本其他2個變量,像這樣:

var unformattedText: String = "" { 
    didSet { 
     display.text = formatCurrency(value: displayValue) 
    } 
} 
var displayValue: Double { 
    get { 
     return Double(unformattedText)! 
    } 
    set { 
     unformattedText = String(newValue) 
    } 
} 

@IBAction func touchDigit(_ sender: UIButton) { 
    let digit = sender.currentTitle! 
    if userIsInTheMiddleOfTyping { 
     unformattedText += digit 
    } else { 
     unformattedText = digit 
     userIsInTheMiddleOfTyping = true 
    } 
}