카테고리 없음
스위프트 계산기만들면서 guard let 사용해보자
kingarthur
2024. 6. 5. 19:50
맨 처음 guard let 만난적은
진짜 아무것도 없는 베이스에서 만나이 만들기
프로젝트를 진행했을 때다
그때는 왜 사용해야 하는지는 이해는 전혀 못 했지만 지금은 이해간다
단순하게 따지면 오류를 방지하기 위해서다
class Calculator {
var input1: Double
var input2: Double
init(input1: Double, input2: Double) {
self.input1 = input1
self.input2 = input2
}
func sum() -> Double {
return input1 + input2
}
func sub() -> Double {
return input1 - input2
}
func div() -> Double {
return input1 / input2
}
func mul() -> Double {
return input1 * input2
}
}
let s = Calculator(input1: 10 , input2: 20)
s.div()
s.sum()
내가 처음 원초적인 코드로 만들어보았다.
하지만 문제에서 원하는 것은 String 받고 결과값을 제출하는 것이기에
다시 생각하게 되었다.
그래서 첫번째 방식
class cal {
var input1: String
var input2: String
init(input1: String, input2: String) {
self.input1 = input1
self.input2 = input2
}
func sum() -> Double {
if Double(input1) != nil && Double(input2) != nil {
return Double(input1)! + Double(input2)!
} else {
return 0
}
}
}
let c = cal(input1: "20", input2: "33")
c.sum()
if 문을 통해서 더블을 nil 값일 수있기 때문에 언랩핑을 해줘야한다.
첫번째는 이렇게 스트링을 더블로 변경해서 문제를 풀어보았다.
class Cal {
var input1: String
var input2: String
init(input1: String, input2: String) {
self.input1 = input1
self.input2 = input2
}
func sum() -> Double {
guard let deInput1 = Double(input1), let deInput2 = Double(input2) else {
return 0
}
return deInput1 + deInput2
}
}
let c = Cal(input1: "10", input2: "20")
c.sum()
두번째는 guard let 이용해서 안전하게 호출을 하는 방식이다
스위프트 권장 사항에도 guard let 사용하길 바란다고 되어 있다
요렇게 나와있다 ㅎㅎㅎ else 필수라고 되어 있다 꼭 사용해야된다
닐 값이 나올 수 있기 때문에 return 0 값을 주어야 한다 꼭 기억하자
class Cal {
var input1: String
var input2: String
var DeInput1: Double? {return Double(input1)}
var DeInput2: Double? {return Double(input2)}
init(input1: String, input2: String) {
self.input1 = input1
self.input2 = input2
}
func sum() -> Double {
guard let deInput1 = c.DeInput1 , let deInput2 = c.DeInput2 else {
return 0
}
return deInput1 + deInput2
}
}
let c = Cal(input1: "10", input2: "20")
c.sum()
이번 방법은 리턴값을 미리 더블로 받아서 계산을 하는 방식이다.
가장 마지막 단계로 정리가 되었다.
더 깔끔하게 될 수 있을거 같지만 난 여기까지 해보았다.
다양한 방식으로 동일한 코드를 작성 할 수 있다는게 신기하기도 하다
어떤게 더 효율적인 코드인지 알고 싶지만 아직까진 나의 능력밖이다
나중에 꽤 능력치가 올라가면 유효성 검사도 많이 해보고 싶다.
오늘도 많은 것을 배워보고 간다. 내일도 화팅