Swift 옵셔널 & 옵셔널 바인딩

Swift 옵셔널 & 옵셔널 바인딩에 대해서 알아보자.


Swift 옵셔널 & 옵셔널 바인딩

Swift 옵셔널(Optional) & 옵셔널 바인딩(Optional Binding)

옵셔널(Optional)

값이 있을 수도 있고 없을 수도 있을 때 사용하는 타입이다.

var stringNum = "111"
var convertedNum = Int(stringNum)
print(convertedNum)  // Optional(111)
 
// 옵셔널 타입 확인
print(type(of: convertedNum))  // Optional<Int>

변수와 상수의 초기값 생략의 차이

변수에 초기값을 생략하면 자동으로 nil 할당된다.

// 상수의 Optional 타입
let constantNum: Int?
constantNum = 10 // 상수는 한 번만 값을 할당할 수 있다.
 
// 변수의 Optional 타입
var optionalNum: Int? // 변수 선언시 옵셔널 타입에 초기값을 생략하면 자동으로 nil 할당
print(optionalNum)  // nil

옵셔널 바인딩(Optional Binding)

옵셔널 바인딩을 사용해서 안전하게 옵셔널을 해제할 수 있다.

let num1: Int? = 123
 
if let num1 = num1 {
  print(num1)  // 123
} else {
  print("No value")
}

강제 언래핑

"!" 연산자를 사용해서 옵셔널을 강제로 언래핑할 수 있다.

let optionalNum: Int?
optionalNum = 3
 
if optionalNum != nil {
  print(optionalNum!)  // 3
} else {
  print("No value")
}

옵셔널 바인딩 예제 1

옵셔널 바인딩에서 선언된 변수와 옵셔널 바인딩 외부에서 선언된 변수의 이름이 같으면 생략 가능하다.

let optionalTest: Int? = 123
if let optionalTest {
  print(optionalTest)  // 123
} else {
  print("No value")
}

옵셔널 바인딩 예제 2

옵셔널 바인딩에서 선언된 변수는 if 구문 내에서만 사용 가능하다.

let optionalTest: Int? = 123 // 1.
if let optionalTest = optionalTest { // 2. 바인딩된 옵셔널은 if 구문 내에서만 사용 가능
  print(optionalTest)  // 123
} else {
  print("No value")
}
print(optionalTest)  // nil // 1번 값이 프린트 된다.

옵셔널 바인딩 예제 3

여러 옵셔널 바인딩이 있는 경우, "," 연산자를 사용해서 여러 옵셔널 바인딩을 한 번에 할 수 있다. 모든 바인딩 조건이 설립할때 실행한다.

if let first = Int("1"), let second = Int("2"), first > second { // 모든 바인딩 조건이 설립할때 실행한다.
  print("first is greater than second")
}