나의 발자취

옵셔널 언래핑 Optional Unwrapping 본문

앱 개발/iOS

옵셔널 언래핑 Optional Unwrapping

달모드 2022. 5. 24. 00:36

옵셔널 추출 네가지

1. 강제추출(Forced Unwrapping) (!) 값이 있다는 것이 확실할 때 사용

var str: String? = "안녕하세요"

print(str!)

nil일 때 forced unwrapping을 하면 에러가 난다.

 

 

2. if문으로 nil 아닌지 확인 후 강제로 벗기기

if str != nil {
    print(str!)
}

 

3. 옵셔널 바인딩 (if let 바인딩)

만약 바인딩이 된다면, 특정 작업을 하겠다는 의미이다. 

if let s = str {    // str에 있는 값이 s라는 상수에 바껴서 담긴다면(nil값이 아니라면). 만약 nil이라면 담기지 않는다!
    print(s)
}

str: Optional String

s: String

 

 

+실제 앱을 만들 때 guard let 바인딩을 많이 사용한다.

func doSomething(name: String?) {
    guard let n = name else { return }  // name에는 optional String인 "hello"가 담겨있음.
    print(n)
}

doSomething(name: "hello")

guard문 안에서 선언한 변수 n은 아래 문장에서도 사용할 수 있다. (동일한 scope로 취급)

 

+if var도 가능은 하지만 이것을 사용하는 경우는 없다. 값을 벗기면 그 값을 사용하게 되고(당연히 사용하려고 언래핑을 하게 되는 것), 그것을 다시 바꾸는 경우는 없기 때문.

 

 

4. Nil-Coalescing 연산자(??) 사용

코어레싱(coalesce): 더 큰 덩어리로 합친다는 뜻

옵셔널 타입에 대하여, 디폴트(기본)값을 제시할 수 있을 때 사용한다. (직접 값을 벗겨서 사용하는 것은 아니고, 디폴트값 제시를 통해 옵셔널 가능성을 없애는 방법)

 

default값을 제시하므로 nil이 나올 수가 없다. 그러므로 아래의 경우에는 userName 변수는 String타입이 된다.

 

var serverName: String? = "홍길동"
var userName = serverName ?? "미인증사용자"    // -> "미인증사용자"라는 디폴트값이 있으므로 String타입


var hello = "인사하겠습니다. " + (str ?? "Say, Hi")
print(hello) // 인사하겠습니다. 안녕하세요


str = nil
print(str ?? "Say, Hi") // 인사하겠습니다. Say, Hi


// 백그라운드 기본 색상이 선택이 안되어 있으면 ====> 회색

 

'앱 개발 > iOS' 카테고리의 다른 글

스위프트 컬렉션 (1) 배열  (0) 2022.05.25
함수와 옵셔널타입  (0) 2022.05.24
옵셔널이란?  (0) 2022.05.24
print문  (0) 2022.05.23
guard문  (0) 2022.05.23
Comments