ios - 自动添加千位分隔符(快速)

原文 标签 ios swift xcode

我有一个计算器的代码
我怎么能这样做,当用户输入数字时,他会被一个空格自动隔开?
我一直在寻找答案,但没有一个合适的答案是它马上就显示出来了
gif

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 numberPressed(_ sender: UIButton) {
    let number = sender.currentTitle!

    if stillTyping {
        if (displayResultLabel.text?.characters.count)! < 14 {
            let formatter = NumberFormatter()
            formatter.numberStyle = .decimal
            let newNumber = NSNumber(value: Double(displayResultLabel.text! + number)!)

            displayResultLabel.text = formatter.string(from: newNumber)
        }
    } else {
        displayResultLabel.text = number
        stillTyping = true
    }
}

错误
enter image description here
var stillTyping = false
var dotIsPlaced = false
var firstOperand: Double = 0
var secondOperand: Double = 0
var operationSign: String = ""

最佳答案

最好将值累积到一个没有应用格式的单独字符串中,而不是使用文本字段作为数据模型。然后,您可以使用NumberFormatter格式化小数,并根据需要将其显示在标签中:

let formatter: NumberFormatter = {
   let formatter = NumberFormatter()
   formatter.numberStyle = .decimal
   return formatter
}()

var currentInput: String = "0" {
    didSet {
        self.displayResultLabel?.text = self.currentDisplay
}

var currentValue: Double {
    return Double(self.currentInput) ?? 0
}

var currentDisplay: String {
    return formatter.string(from: NSNumber(value:self.currentValue)) ?? "0"
}

func addDigit(_ digit: Int) {
    if currentInput.count < 14 {
        let newValue = self.currentValue * 10 + Double(digit)
        self.currentInput = "\(newValue)"
    }
}

@IBAction func numberPressed(_ sender: UIButton) {
    guard let digit = Int(sender.currentTitle!) else {
        return
    }

    self.addDigit(digit)
}

关于ios - 自动添加千位分隔符(快速),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47616227/

相关文章:

swift - 单击按钮时需要去除内部阴影

ios - 当两次选择tableview单元格时,它崩溃并发现错误,异常为零

ios - 将数据上传到Parse.com时,UIAlertView似乎卡住了应用程序

xcode - 如何为 UIView 创建半透明背景?

ios - 分发库时如何将库排除在框架之外?

ios - Swift 4-识别“从一个 View 到另一个 View 的手指平移”

ios - 滚动加载新图像时,表格 View 急剧移动

ios - 使用 Swift 检查互联网连接

ios - 如何捕获stderr输出并通过 objective-c 中的POST请求将消息发送到远程日志文件?

ios - 苹果正在扼杀带有白色标签的 iOS 应用程序!我们应该做什么?