2017-12-03 5 views
0

ユーザーが、彼は自動的にスペースで区切られることになる数字を入力したときにように、私はどのように私は私の電卓自動的に(スウィフト)の桁区切りを追加

のコードを行うことができますか?

私は長い時間のための答えを見つけるためにしようとしてきたが、何もそれがその後何が起こった すぐ


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 = "" 

答えて

1

書式設定が適用されていない別の文字列に値を累積する方がよいあなたのデータモデルとしてテキストフィールドを使用するよりも。その後、小数点をフォーマットし、使用して必要に応じてラベルに表示することができ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) 
} 
1

これはNumberFormatter sが両方の道を行くことNumberFormatter sが

let formatter = NumberFormatter() 
formatter.numberStyle = .decimal 
if let newNumber = formatter.number(from: displayResultLabel.text! + number){ 
    displayResultLabel.text = formatter.string(from: newNumber) 
} 

注するためのものである、とあなたは(おそらく必要があります)から数字を解析するためにそれらを使用することができるものです文字列も

+0

エラーが表示されます - インスタンスメンバーのnumberStyle」タイプでは使用できません「NumberFormatterは」そのことについて – B2Fq

+0

申し訳ありません。私は実際にそれをインスタンス化するために括弧を忘れていました:P私のマシン上で同様の例がコンパイルされました –

+0

8888(888に変更)を入力した後にエラーが発生しました - "スレッド1:致命的なエラー:オプション " – B2Fq

関連する問題