스위프트 스터디 15탄) 옵셔널 체이닝 (optional chaining)
스위프트 공식문서를 참조하였습니다.
옵셔널이란?
먼저 옵셔널 체이닝을 이해하기 이전에 옵셔널이라는 타입을 이해해야 한다.
옵셔널이란, nil이 들어갈수 있는 변수를 의미하며, 옵셔널의 값은 nil혹은 nil이 아닌값만을 가질수 있다.
옵셔널 선언
var st:String? = "hi"
옵셔널을 선언하기 위해서는 타입선언 뒤에 ? 를 붙여서 옵셔널 타입을 주면 된다.
옵셔널 해제
옵셔널 타입은 연산을 지원해주지 않는다. 즉 다른 변수들과의 연산을 전혀 할수가 없다. 옵셔널 타입의 결과값은 항상 옵셔널 타입만을 알려주기 때문에 언래핑을 해주어서 사용해야 한다.
옵셔널 해제는 명시적 해제 , 묵시적 해제로 나뉜다.
- 명시적 해제 : 강제 해제, 비강제 해제
- 묵시적 해제 : 컴파일러에 의한 자동해제, ! 연산자를 이용하여 자동 해제
명시적 해제
var option : Int? =10 print("value = \(option!)")
이처럼 옵셔널 타입의 값 뒤에 !를 붙여주는걸로 강제로 일반타입으로 바꿔줄수 있다.
묵시적 해제
형식상 옵셔널 변수 타입을 선언해야 하지만, ! 연산자를 이용하여 묵시적 해제를 선언하게 되면, 자동으로 변수를 지정해줄때, 컴파일러가 자동으로 옵셔널을 해제해 준다.
- 실제 사용시 nil의 값이 들어갈 확율이 없을 때 사용하게 된다.
var value : Int! = Int("12345")
옵셔널 체이닝의 정의
옵셔널 체이닝은 nil일수도 있는 프로퍼티(옵셔널 프로퍼티, 프로퍼티에 ? 혹은 ! 붙인놈) , 메소드 그리고 서브스크립트에 nil인지 질의하는 과정이다. 만약 옵셔널 체이닝이 프로퍼티, 메소드, 혹은 서브스크립트에 대한 값을 가질때, 그 값을 반환하고 그 반환된 값이 nil이면 nil을 반환하는데, 연결된 질문중 하나라도 nil이면 nil을 반환하게 된다.
옵셔널 체이닝의 선언
옵셔널 체이닝의 경우에는 강제 언래핑(!)의 대체제로 사용할 수 있는데, 강제 언래핑과의 차이는, 강제언래핑의 경우 그 값이 nil이면 런타임 에러를 반환하지만, 옵셔널 체이닝의 경우에는 런타임 에러가 아닌 nil이 반환된다는 것이다.
- nil값이 반환되기 때문에 옵셔널 체이닝의 반환값은 항상 옵셔널이다.
Uploaded by
N2T