- Optional
- Optional Biniding
- 옵셔널 해제
- 명시적 해제
- 강제 해제
- 비강제 해제 (옵셔널 바인딩)
- 묵시적 해제
- 컴파일러에 의한 자동 해제
- 옵셔널의 묵시적 해제
- "?" / "!"
- 옵셔널 (선택적인)
값이 있을수도, 없을수도 있음을 말함.- 선언시에 타입뒤에 ?(물음표)를 붙여 사용할 수 있다.
// 옵셔널 : 선택적인 // 값이 있을수도 없을 수도 있음. // var name: String? var optionalName: String? = "KSW" print(optionalName) // 에러 코드 (타입 에러) // 스위프트는 안정성을 위해 컴파일 에러를 낸다. // var name2: String = optionalName
- 출력 결과를 살펴보면 Optional 이라는 포장지에 감싸있는 것을 볼 수 있다.
- 이 Optional에 감싸있는 값은 일반 타입과 결합도 연산도 할 수 없다.
- 이 작업을 수행하려면 Optional Binding 을 해야한다.
-> Optional 포장지를 벗기는 과정.
옵셔널 바인딩 : Optional 포장지를 벗겨 값을 추출하는 과정
옵셔널 해제 방법
1. 명시적 해제
- 강제 해제
- 비강제 해제 (옵셔널 바인딩)
2. 묵시적 해제
- 컴파일러에 의한 자동 해제
- 옵셔널의 묵시적 해제
Swift 코드
// 명시적 해제 // 강제 해제 (느낌표 붙이기. 위험함) var number: Int? = 3 print(number) print(number!) // 비강제 해제 1 (if문 사용 옵셔널 바인딩) // **** 이 문법이 낯설다. if let result = number { print(result) } else{ print("nil") } // 비강제 해제 2 (gaurd문 사용 옵셔널 바인딩) // guard 문을 사용해서도 옵셔널 바인딩을 할 수 있다. // guard 문에 대한 글 포스팅 예정. // 컴파일러에 의한 자동 해제 // 옵셔널 값은 비교연산자를 이용해 다른 값과 비교하면, // 컴파일러가 자동적으로 옵셔널 값을 해제 시켜준다. let value: Int? = 6 if value == 6 { print("value가 6입니다.") } else { print("value가 6이 아닙니다.") } // 묵시적 옵셔널 해제 // 값을 사용할 때는 자동으로 옵셔널이 해제됨 let str = "12" var strToInt: Int? = Int(str) // Int() 함수는 매개변수에 정수로 변환될 수 없는 값이 오면 // nil을 반환하기 때문에 옵셔널 타입으로 선언해야 한다. print(strToInt) // 선언시에 ! 키워드를 사용하면 묵시적으로 옵셔널 해제를 해준다. var strToInt2: Int! = Int(str) print(strToInt2+1)