(이 정도면 비슷하지 않나..?)
이 부분에서 제일 고민을 많이 했다. 일단, 사칙연산 함수를 구현하기 전에 DisplayLabel
에서 숫자를 어떻게 표현할지 고민을 했다.
func changeNumber(_ a: Int){
load = false // 무언가 입력이 있었기 때문에 출력이 바뀌겠지.
printnum = printnum*10 + Double(a)
displayLabel.text = String(printnum)
if !load { // 처음이 아니면 다 C로 떠야함.
acButton.setTitle("C", for: .normal)
}
else{
acButton.setTitle("AC", for: .normal)
}
}
나는 이런 방식을 사용하였다.
그리고 사칙연산은, 연산을 하려는 숫자 두 개와 사칙연산중 어떤 연산을 할지 알려주는 숫자 하나, 총 3개의 매개변수를 이용하는 함수를 만들었다.
func operation(_ a: Double, _ b: Double, _ op:Int) -> Double { // 계산하는 함수. 1 : +, 2:-, 3:*, 4:/, 5:%
switch op{
case 1:
return (a + b)
case 2:
return (a - b)
case 3:
return (a * b)
case 4:
return (a / b)
case 5:
return a.truncatingRemainder(dividingBy: b)
default:
return 0
}
}
다른 언어에서는 나머지 연산(%
)이 사용가능했는데, 여기서는 오류가 떠서 구글링을 해보니 truncatingRamainder(dividingBy: )
함수를 사용하라고 하더라.
프린트는 좀 비효율적으로 만들었다. 처음에 큰 그림을 아예 생각하지 않고 코드를 짜다보니 뭔가 더티 코딩이 된 것 같은 느낌...그래서 프린트 문은 너무 많은 함수에 껴있기 때문에 따로 코드 첨부를 하지 않았다.
이제 또 목표는 출력이 9자리가 안넘어가게 하는 것과 쉼표 넣는 것 등이 있겠다.
이런거 한번 만들어보니 재밌구나!
클론코딩을 앞으로 많이 해봐야겠다.