代码之家  ›  专栏  ›  技术社区  ›  user8621540

如何在Swift计算器中显示数千个分组?

  •  1
  • user8621540  · 技术社区  · 7 年前

    我有我的简单计算器的代码。

    之前:

    1000000

    之后:

    1.000.000

    var stillTyping = false
    var dotIsPlaced = false
    var firstOperand: Double = 0
    var secondOperand: Double = 0
    var operationSign: String = ""
    var currentInput: Double {
        get {
            return Double (displayResultLabel.text!)!
        }
        set {
            let value = "\(newValue)"
            let ValueArray = (value.components(separatedBy:"."))
            if ValueArray[1] == "0" {
                displayResultLabel.text = "\(ValueArray[0])"
            } else {
                displayResultLabel.text = "\(newValue)"
            }
            stillTyping = false
        }
    }
    
    @IBAction func numberPressed(_ sender: UIButton) {
        let number = sender.currentTitle!
        if stillTyping {
            if (displayResultLabel.text?.characters.count)! < 14 {
                displayResultLabel.text = displayResultLabel.text! + number
            }
        } else {
            displayResultLabel.text = number
            stillTyping = true
        }
    }
    
    @IBAction func twoOperandsSignPressed(sender: UIButton) {
        operationSign = sender.currentTitle!
        firstOperand = currentInput
        stillTyping = false
        dotIsPlaced = false
    }
    
    func operateWithTwoOperands(operation: (Double, Double) -> Double) {
        currentInput = operation(firstOperand, secondOperand)
        stillTyping = false
    }
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   glyvox    7 年前

    您应该使用此扩展,它与 NumberFormatter :

    struct Number {
        static let formatterWithDots: NumberFormatter = {
            let formatter = NumberFormatter()
            formatter.groupingSeparator = "." // only include this if you want to use dots regardless of the locale
            formatter.numberStyle = .decimal
            return formatter
        }()
    }
    
    extension Double {
        var formattedWithDots: String? {
            return Number.formatterWithDots.string(from: self as NSNumber)
        }
    }
    

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
    
        NotificationCenter.default.addObserver(self, selector: #selector(textFieldDidChange), name: .UITextFieldTextDidChange, object: nil)
    }
    
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
    
        NotificationCenter.default.removeObserver(self)
    }
    
    @objc fileprivate func textFieldDidChange() {
        if let number = Double(textField.text ?? "") {
            textField.text = number.formattedWithDots
        }
    }