- 옵셔널 상세내용은 아래 참고하세요!
[Swift]옵셔널이란?
- 강제 추출(Forced unwrapping)
- 옵셔널 바인당(Binding)
- nil 결합(Nil-Coalescing) 연산자
- 암시적 추출 옵셔널
- 옵셔널 체이닝(Chaining) - 연쇄적으로 옵셔널 접근
!를 붙여 값을 강제적으로 반환하는 방식이 있습니다.그래서 간단한 테스트 이외에는 사용하는것은 비추천합니다!!
var x: String? = "test"
print(x) // 출력결과 : Optional("test")
print(x!) // 출력결과 : test
x = nil
print(x!) // 🚨 런타임 오류 발생!!!
if let, gurad let 구문으로 사용합니다.let optionalString : String? = "Hello"
// if let
if let x = optionalString {
// 값이 있는 경우 실행 코드
print(x) // 출력 결과 : Hello
}else{
// 값이 없는 경우 실행 코드
print("값 없음")
}
// guard let
func bindingWithGuard() {
guard let y = optionalString else{
// 값이 없는 경우 실행 코드
print("값 없음")
}
// 값이 있는 경우 실행 코드
print(y) // 출력 결과 : Hello
}
??를 쓰고 뒤에 대체로 들어갈 값을 입력해 사용합니다.옵셔널 타입 변수 ?? 대체값
var optionalString : String? = "Hello"
let x = optionalString ?? "값 없음" // String타입
print(x) // 출력 결과 : Hello
optionalString = nil
let y = optionalString ?? "값 없음" // String타입
print(y) // 출력 결과 : 값 없음
!를 사용하여 암시적 추출을 정의하고, 다른 변수에 값을 할당할 경우 자동으로 추출(Unwrapped)되는 옵셔널 타입입니다.nil이 들어가는 경우에는 동일하게 런타임 오류가 발생합니다.var myOptional: Int! = 42
print(myOptional) // 출력: Optional(42)
let value = myOptional! // 값 추출
print(value) // 출력: 42
nil이라면, 체이닝은 멈추고 nil을 반환합니다.?를 붙여 사용합니다.struct Address {
var street: String?
}
class Person {
var name: String?
var address: Address?
}
var person: Person?
person = Person()
person.name = "John"
person.address = Address()
person.address?.street = "123 Main Street"
if let street = person.address?.street {
print("Street: \(street)") // 출력: "Street: 123 Main Street"
} else {
print("No street address")
}
// 만약 person.address = Address() 없이 person.address 가 nil일 경우 "No street address" 출력