옵셔널 (Optional)
값이 존재할 수도 있고, 존재하지 않을 수도 있음을 나타내는 타입
var optionalNumber: Int? = 1
// 옵셔널은 nil을 가질 수 있음
optionalNumber = nil
옵셔널은 ? 를 사용해 선언
optionalNumber 변수는 Int 타입의 값이 있을 수도 있고 값이 없을 수도 있다, 없음은 nil로 표현한다.
옵셔널 바인딩
옵셔널은 값이 없을 수 있기 때문에 항상 안전하게 확인해야한다.
if - let 바인딩
var name: String? = "철수"
if let unwrappedName = name {
print("이름은 \(unwrappedName)입니다.") // 이름은 철수입니다.
}else{
print("이름이 없습니다.")
}
옵셔널의 값이 있으면 그 값을 변수나 상수에 대입하고 if 구문 실행 , 옵셔널에 값이 없을땐 else 구문 실행
guard - let 바인딩
func printName(_ name: String?) {
guard let unwrappedName = name else {
print("이름이 없습니다.")
return
}
print("이름은 \(unwrappedName)입니다.")
}
printName("철수") // 이름은 철수입니다.
printName(nil) // 이름이 없습니다.
보통 함수 내에서 값이 있으면 코드가 계속 실행하고 없으면 빠져나오기 위해 사용한다.
반드시 else 구문을 빠져나올 수 있게 return, break, continue 등을 사용해야한다.
옵셔널 체이닝
접근 도중 중간에 값이 nil 일 경우 중단하고 nil 을 반환한다.
class Person{
var name: String?
var job: Job?
}
class Job{
var jobName: String?
}
let person = Person()
person.job = Job()
person.job?.jobName = "제빵사"
if let job = person.job?.jobName {
print("직업은 \(job)입니다.") // 직업은 제빵사입니다.
}else{
print("직업이 없습니다")
}
person.job?.jobName 이 부분이 옵셔널 체이닝
person.job이 존재하면 jobName에 접근
person.job이 존재하지 않으면 jobName에 접근을 중단하고 nil 반환
nil 병합 연산자
?? 연산자를 사용해서 nil일 경우 기본 값을 제공해서 처리 할 수 있다.
let optionalNumber: Int? = nil
let defaultNumber = optionalNumber ?? 100 // 기본값 100
print(defaultNumber) // 100
강제 언래핑
옵셔널의 값이 있을 경우, ! 연산자를 사용해서 강제로 추출 할 수 있다.
var optionalNumber: Int? = 1
print(optionalNumber!) // 1
값이 없는 nil 일 경우에는 오류가 발생하니 주의해야한다, 확실한 상황이 아니라면 사용하지 않는게 좋다.
728x90
'Swift > 기초' 카테고리의 다른 글
Swift 기초 다지기 - 프로토콜과 익스텐션 (0) | 2024.10.08 |
---|---|
Swift 기초 다지기 - 구조체 (Struct) 그리고 클래스와의 차이점 (1) | 2024.10.07 |
Swift 기초 다지기 - 클래스 (Class) (0) | 2024.10.07 |
Swift 기초 다지기 - 열거형 (Enum) (2) | 2024.10.06 |
Swift 기초 다지기 - 클로저 (Closures) (0) | 2024.10.04 |
댓글