2017-06-14 119 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 
    } 
}