Swift Optional 개념 정리
옵셔널(Optional) 개념
- 뜻 그대로 값이 있을 수도 없을 수도 있는 것, 그런 변수를 정의하는 것
- “”는 빈 값, nil이 값이 없는 것을 말함
- 이런 nil 값을 넣을 수 있는 게 옵셔널이라고 부름
- 옵셔널로 선언시 기본값은 nil이다
- 타입 어노테이션에 ‘?’ 키워드를 붙여서 정의
- optional과 아닌 변수는 서로 구분된다(구분 x시 컴파일 에러가 뜸)
var student: String?
//nil
student = "John"
//John
옵셔널 바인딩(binding)
- 옵셔널 값이 존재하는 지 검사한 뒤 존재한다면 값을 가져오는 방법
- if let 혹은 if var 를 사용하여 값이 있다면 if문 안으로 들어가고 없으면 통과
if let stu = student {
//옵셔널인 student의 값이 존재한다면 실행
}
- 하나의 if 문에서 여러개 옵셔널 바인딩이 가능 (모든 값이 존재해야 if문 진입)
- 바인딩 시 ‘,’를 이용해서 다른 조건도 함께 지정 가능하며 옵셔널 바인딩이 일어난 후에 조건절 실행
if let stu = student, stu == "John" {
//옵셔널 변수 student가 존재한다면 stu에 저장되고 John이라면 if문 안 실행
}
옵셔널 체이닝(chaining)
- 빈 값 검사 시 바인딩 과정을 ? 키워드로 줄여주는 것
- 위 바인딩에서 student가 빈 값인지 검사할 때 예시
var isStudentEmpty = false
if let stu = student, stu.isEmpty {
//stu가 빈 값이면 여기 실행
isStudentEmpty = true
} else {
isStudentEmpty = false
}
// 옵셔널 체이닝 이용하면 아래와 같음
let isStudentEmpty = student?.isEmpty == true
3가지 경우의 수
student?.isEmpty
- student가 nil인 경우: nil 반환
- student가 비었을 경우: true 반환
- student에 요소가 있는 경우: false 반환
isEmpty의 반환값은 Bool 이므로 ?를 이용해서 Bool?을 반환하도록 바뀜.
따라서 값이 실제로 true인지 확인하려면 ==true 를 해야 함.
옵셔널 벗기기
옵셔널을 사용할 때마다 옵셔널 바인딩을 하는 것이 가장 바람직하지만, 값이 존재할 것임에도 옵셔널로 사용하는 경우가 있음
- 값이 있다고 가정하고 값에 바로 접근할 수 있도록 도와주는 키워드! 를 사용
- 옵셔널 값이 nil일 경우 런타임 에러가 발생
print(student) // Optional("John")
print(student!) // John
암묵적으로 벗겨진 옵셔널****(Implicitly Unwrapped Optional)****
- 옵셔널 정의 시 ? 대신! 를 붙이면 암묵적으로 벗겨진 옵셔널이 됨
- nil을 포함할 수 있는 옵셔널이지만 접근 시 바로 접근 가능(바인딩 x, 벗기기x)
- 옵셔널 값이 nil일 경우 런타임 에러가 발생
- 가급적이면 일반적인 옵셔널을 사용해서 정의
var email: String! = "pcy@gmail.com"
print(email) // pcy@gmail.com
'컴퓨터 공학 분야 별 지식 > ios' 카테고리의 다른 글
[swift, ios] 동영상 경로 못 찾을 때 해결 방법 (0) | 2022.05.18 |
---|