나의 기록, 현진록

[Swift] 8.2.2 옵셔널 바인딩 본문

Programming/Swift

[Swift] 8.2.2 옵셔널 바인딩

guswlsdk 2021. 7. 14. 10:42
반응형

스위프트 프로그래밍 3판 - 야곰 지음

 

var myName: String? = "hyunjin"

myName = nil

if myName != nil{
    print("My name is \(myName)")
}else{
    print("myName == nil")
}

 

위에서 사용한 if 구문을 통해 myName이 nil인지 아닌지 먼저 확인하는 것은 다른 프로그래밍 언어에서 NULL 값을 체크하는 방식과 비슷하다. 앞서 설명한 것처럼 옵셔널을 사용하는 의미도 사라진다. 그래서 스위프트는 조금 더 안전하고 세련된 방법으로 옵셔널 바인딩을 제공한다

 

 

옵셔널 바인딩은 옵셔널에 값이 있는지 확인할 때 사용한다. 만약 옵셔널에 값이 있다면 옵셔널에서 추출한 값을 일정 블록 안에서 사용할 수 있는 상수나 변수로 할당해서 옵셔널이 아닌 형태로 사용할 수 있도록 해준다.

 

 

 

var myName: String? = "hyunjin"

// 옵셔널 바인딩을 통한 임시 상수 할당
if let name = myName{
    print("My name is \(name)")
}else{
    print("myName == nil")
}

// 옵셔널 바인딩을 통한 임시 변수 할당
if var name = myName{
    name = "wizplan"
    print("my name is \(name)")
}else{
    print("myName == nil")
}

 

if 구문을 실행하는 블록 안쪽에서만 name이라는 임시 상수를 사용할 수 있습니다. 즉 if 블록 밖에서는 사용할 수 없고 else 블록에서도 사용할 수 없다. 그렇기 때문에 위와 아래에서 모두 별도로 name을 사용했지만 충돌이 일어나지 않았다. 상수로 사용하지 않고 변수로도 사용하고 싶다면 if let이 아닌 if var로 임시 변수 또한 할당 가능하다. if else뿐만 아니라 else if 블록도 추가할 수 있다. 

 

 

 

옵셔널 바인딩 통해 한 번에 여러 개의 옵셔널 값을 추출할 수도 있다. 쉼표(,)를 사용해 바인딩 할 옵셔널을 나열하면 된다.

 

 

 

var myName: String? = "hyunjin"
var yourName: String? = nil

if let name = myName, let friend = yourName{
    print("we are friend! \(name) & \(friend)")
}

yourName = "eric"

if let name = myName, let friend = yourName{
    print("we are friend! \(name) & \(friend)")
}

 

첫 번째 if 구문에서는 friend에 바인딩 된 값이 없기 때문에 거짓이 되어 실행되지 않았다.

 

 

반응형