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

标签 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 - 自动添加千位分隔符(Swift),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47616227/

相关文章:

ios - UICollectionViewLayout layoutAttributesForElementsInRect 和 layoutAttributesForItemAtIndexPath

ios - 使用 slider 面板和 TableView 设计 ViewController

ios - ld : framework not found after pod install

ios - 错误 : UICollectionView received layout attributes for a cell with an index path that does not exist in Swift

xcode - Swift 2.0 Xcode 7.1 谷歌地图 SDK

ios - 在 uisearchDisplayController '是结果中,如何突出显示在搜索栏中输入的字符串?

ios - iOS 中的 GPS 导航

iphone - Xcode 4 调试器在错误的文件中中断

ios - 'AFHTTPSessionManager' 没有可见的@interface 声明选择器 'POST:parameters:progress:success:failure:'

javascript - 无法从 IOS 中的 ionic 1 应用程序页面复制 <p> 标记内的文本