이제 환급챌린지도 절반이 지나갔다.
나머지도 성실하게 임하도록 하자
오늘은 optional의 고오급 개념을 배웠다.
이제 슬슬 스위프트에서만 등장하는 기능을 다루다보니 낯선 느낌이 있다.
optional의 고급 기능은 총 4가지가 있다
- Forced unwrapping
- Optional binding (if let)
- Optional binding (guard)
- Nil coalescing
차례대로 하나씩 살펴보자
1. Forced unwrapping
// Forced unwrapping > 억지로 박스를 까보기
var carName: String?
carName = "땡크"
print(carName) // print: Optional("땡크")
print(carName!) // print: 땡크
optional로 할당된 carName이란 변수는 값이 있을 수도, 없을 수도 있다.
이 optional변수를 print로 출력해보면 있을 경우에는 Option("~~")의 형태로 출력이 된다.
그런데 만약 무조건 이 변수를 출력하거나 참조해야한다면 ! 키워드를 변수 뒤에 붙이도록 한다.
사실 융통성 있는 방법은 아니고 값이 할당되어있지 않을 경우 에러가 발생하기 때문에, 그닥 쓰고싶지는 않다.
2. Optional binding (if let)
// Optional binding (if let) > 부드럽게 박스를 까보자 1
if let unwrappedCarName = carName {
print(unwrappedCarName)
} else {
print("Car Name 없다")
}
두 번째 기능은 optional bindin이다.
if 조건문을 이용하는데, 조건에 변수 선언이 가능하다.
결국 이렇게도 볼 수 있다.
if carName {
print(carName)
} else {
print("Car Name 없다")
}
그러나 큰 차이가 있는데, 단순히 print를 실행하는 것이 아니라
조건문 내에서 unwrappedCarName의 값을 수정해야 한다면 위의 코드는 carName의 값을 건드리지 않고,
다시말해 사이드이펙트를 발생시키지 않고 코드를 실행할 수 있을 것이다.
3. Optional binding (guard)
func printParsedInt(from: String) {
guard let parsedInt = Int(from) else {
print("Int로 컨버팅 안된다 짜샤. ")
return
}
print(parsedInt)
}
세 번째는 두 번째 조건문 코드를 함수에 담은 것인데, else조건을 맨 위로 옮겼다
그래서 함수 진입 시 예외조건에 해당되면 바로 탈출, 해당되지 않는다면 지나쳐서 함수의 코드를 실행할 것이다.
보통 백트래킹 문제를 풀 때 탈출조건을 반복문이나 함수구문의 맨 위에 올리는 것과 비슷한 형태다.
코드의 depth가 깊어지는 것을 막기 위한 기법인데, javascript의 코드 컨벤션 중 하나인 early return과 비슷한 목적인 것 같다.
4. Nil coalescing
// Nil coalescing > 박스를 까봤더니, 값이 없으면 디폴트 값을 줘보자
carName = "모델 3"
let myCarName: String = carName ?? "모델 S"
carName에 "모델 3"이란 값이 할당되지 않아서 nil값일 경우, 설정된 디폴트값이 할당된다.
올인원 패키지 : iOS 앱 개발👉https://bit.ly/2FjWizq
'패스트캠퍼스) ios 개발 챌린지' 카테고리의 다른 글
[패스트캠퍼스 수강 후기] IOS개발강의 100% 환급 챌린지 18회차 미션 (0) | 2020.11.19 |
---|---|
[패스트캠퍼스 수강 후기] IOS개발강의 100% 환급 챌린지 17회차 미션 (0) | 2020.11.18 |
[패스트캠퍼스 수강 후기] IOS개발강의 100% 환급 챌린지 15회차 미션 (0) | 2020.11.16 |
[패스트캠퍼스 수강 후기] IOS개발강의 100% 환급 챌린지 14회차 미션 (0) | 2020.11.15 |
[패스트캠퍼스 수강 후기] IOS개발강의 100% 환급 챌린지 13회차 미션 (0) | 2020.11.14 |