옵셔널
- 스위프트에서 안정성을 추구하기 위한 선언방법
- 정의된 값이외에 값일 경우 nil를 반환하도록 함
옵셔널 사용
- 객체나 데이터 다루기
- 객체나 데이터를 이용한 함수, 프로퍼티, 첨자 접근 등
- 유효한 객체나 유효한 값에서 정상 동작
- nil 에서는 - 비정상 동작
- 옵셔널 타입 사용
- 옵셔날 타입의 객체는 nil일 수도 있다 -> 옵셔널 타입 객체는 다른 사용방법 있음
- nil인 경우아 nil아닌 경우를 고려
- 잘못된 옵셔널 사용 예
var optionalStr : String?
if optionalStr != nil {
print("nil이 아니다!")
}
else {
print("nil이다")
}
- 옵셔널 타입의 객체 사용방법
- 옵셔널 타입 : nil이거나 혹은 유효한 값
- 언래핑 : 옵셔널 타입의 변수에서 유효한 값 얻어오기
- nil 여부 비교, 옵셔널 바인딩
- 옵셔널 체인
- 강제 언래핑
nil 검사하기
- if, guard
var optionalStr : String?="ABC"
//OptionalType 직접 사용은 불가!
optionalStr.lowercased()
- 조건문 작성하기 : !=nil, ==nil 조건 생략 불가
if optinalVal {
}
옵셔널 바인딩
- if 를 이용한 옵셔날 바인딩
if let realStr = optionalStr {
print("문자열의 값\(realStr)")
}
else {
print("문자열이 nil이다.");
}
- guard를 이용한 옵셔널 바인딩
- 바인딩 된 상수의 범위 (scope)
func bindingWithWhere() {
guard let val = nilAvailable, val > 0 else {
return;
}
print("val은 유효하고 0 보다 큰 값이다. \(val)")
}
- 다중 바인딩, 함수 호출(옵셔널 타입 반환)
if let val1 = someFunc(), //콤마
let val = anotherFunc() {
// 코드입력
}
//인자는 논 옵셔널
//연산의 결과는 옵셔널
- 옵셔널 바인딩 체인
if let val1 = nilAvailableStr,
let var2 =Int(val1) {
//코드
}
옵셔널 체인
- 유효한 값인 경우
var optionalStr : String? = "ABC"
let str = optinalStr?.lowercased()
//출력결과 abc
- nil 인 경우
import Cocoa
var optinalStr : String? = "ABC"
optinalStr = nil
let str2 = optinalStr?.lowercased()
//출력결과은 nil
- 프로퍼티 접근/ 메소드 호출/ 배열, 딕셔너리 접근
import Cocoa
let array : [String]? = ["A","B","C"]
let str = array?[1].lowercased()
//출력결과
배열 1에 들어가 B의 lowercase b