2017-12-03 1 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

형식을 적용하지 않은 별도의 문자열에 값을 누적하는 것이 좋습니다. r 데이터 모델로 텍스트 필드를 사용하는 것보다. 그런 다음 진수를 포맷하고 사용하여 필요에 따라 라벨에 표시 할 수있는 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의 두 가지 방법으로 갈 것을 NumberFormatter

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

죄송합니다. 비슷한 예제가 내 컴퓨터에서 컴파일됩니다. –

+0

8888을 입력하면 (888로 변경됨) 오류가 발생했습니다. - "스레드 1 : 치명적인 오류 : 언 래핑 중에 예기치 않게 nil을 발견했습니다. 옵션 " – B2Fq

관련 문제