패스트캠퍼스) ios 개발 챌린지

[패스트캠퍼스 수강 후기] IOS개발강의 100% 환급 챌린지 16회차 미션

student513 2020. 11. 17. 14:16

이제 환급챌린지도 절반이 지나갔다. 

나머지도 성실하게 임하도록 하자

 

오늘은 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