Optional 이란 ?
어떤 변수는 컴파일 순간에 값이 정해지지 않는 경우가 있다.
이런 변수를 Optional 변수라고 한다.
변수 / 상수 선언 3가지
- 일반 : 일반 값을 저장할 수 있으나 절대 nil 값을 지정할 수 없다.
- Optional : 일반 값과 nil 값을 저장할 수 있다.
- Implicit Unwrapping : 일시적으로 nil을 가질 수 있으나 read 되기전에 반드시 일반 값이 저장되어야 한다. 아니면 -> 죽는다.
Forced Unwrapping (강제 언래핑)
- Optional 변수의 값을 일반 변수의 값으로 변환
- 문법 : 변수 !
var anumber : Int = 10 //일반
var bnumber : Int? = 20 //옵셔널
var cnumber: Int! //암시적 언랩 옵셔널
var dnumber: Int! //암시적 언랩 옵셔널
anumber = bnumber //문법 에러
anumber = bnumber! //강제 언래핑
Optional Binding (옵셔널 바인딩)
guard - 옵셔널 바인딩 중 하나라도 nil이면 else로 빠져 나옴
func compre2numbers(first: String, second:String) -> String {
guard let firstNumber = Int(first), let secondNumber = Int(second) else {
return "error"
}
// 이 이후에만 firstNumber, secondNumber가 유효함
if firstNumber < secondNumber && secondNumber < 100 {
return "\(firstNumber) < \(secondNumber) < 100"
}
return "error"
}
print(compre2numbers(first: "10", second: "42"))
Optional Chaining (옵셔널 체이닝)
- 옵셔널 체이닝은 옵셔널 변수를 사용하여 하위 프로퍼티 , 메소드, 스브스크립트 등을 액세스할 때 옵셔널 변수가 nil인 경우 하위 프로퍼티 , 메소드 , 스브스크립트 등의 액세스 없이 결과를 nil로 함.
- 액세스하고자하는 프로퍼티, 메소드에 ?를 붙여서 표시
guard let location = placemarks?.first?.location else { return print("no data")}
'iOS' 카테고리의 다른 글
Swift - REST API(URL Session,URL Request ,URL SessionTask) (0) | 2024.04.20 |
---|---|
Swift - Sync 와 ASync (0) | 2024.04.20 |
Swift - 클로저(Closure) 함수 (0) | 2024.04.19 |
Swift - protocol 생성 Anyobject 상속 (0) | 2024.03.30 |
Swift - final class (0) | 2024.03.30 |
댓글