wift 정리 - Optional Chaining
nil
일 수도 있는 프로퍼티나 메서드, 서브크립트에 질의(Query)를 하는 과정
- 옵셔널이 값을 갖고 있다면 값을 반환
nil
이라면nil
을 반환- 질의를 연결했을 때, 어느 하나라도
nil
일 경우 전체 결과는nil
import Foundation
struct SomeOptionalStruct {
var someOptionalProperty: Int?
}
class SomeOptionalClass {
var someOptionalStruct: SomeOptionalStruct?
init() {
someOptionalStruct = SomeOptionalStruct()
}
}
let someOptionalClass: SomeOptionalClass? = SomeOptionalClass()
print(someOptionalClass?.someOptionalStruct?.someOptionalProperty)
// nil
someOptionalClass?.someOptionalStruct?.someOptionalProperty = 3
print(someOptionalClass?.someOptionalStruct?.someOptionalProperty)
// Optional(3)
Objective-C의 nil 메시징
옵셔널 체이닝은 Objective-C의 nil 메시징과 유사
- 차이점
- reference type 뿐만 아니라 primitive type에서도 사용 가능
- 값을 가져올 때, 성공 및 실패 여부 확인 가능
Optional Chaining as an Alternative to Forced Unwrapping
옵셔널 체이닝은 옵셔널 값 뒤에 ?
를 붙여서 표현
강제 언래핑은 옵셔널 값 뒤에 !
를 붙여서 표현
옵셔널 체이닝 | 강제 언래핑 | |
---|---|---|
nil 값 호출 시 | nil 값 반환 | 런타임 에러 발생 |
반환 타입 | 옵셔녈 | 옵셔널이 아닌 타입 자체 |
옵셔널 체이닝은 호출 시 런타임 에러가 발생하지 않기 때문에 안정적이지만
옵셔널 언래핑이 필요한 상황이라면 코드가 다소 길어질 수 있다.
Accessing Through Optional Chaining
if let
혹은 guard let
구문으로 옵셔널 언래핑을 진행하고, 값을 가져오는데에 성공했는지 실패했는지 알 수 있다.
if let
if let value = someClass?.someProperty {
print(value)
} else {
print("value is nil")
}
guard let
guard let value = someClass?.someProperty else {
print("value is nil")
return // 메서드 내부에 있다고 가정
}
print(value)
- 메서드 호출 시, 리턴값이 없는 경우 암시적으로
Void
를 반환
따라서 옵셔널 체이닝에 리턴값이 없는 메서드가 호출되면Void?
를 반환- 이 때
if
문 등으로 값이nil
인지 확인하여 값을 가져오는 데에 성공하였는지 판단 가능
- 이 때
Linking Multiple Levels of Chaining
여러 단계에 걸쳐 옵셔널 체이닝을 연결 가능
- 체이닝의 상위 레벨이 옵셔널인 경우 현재 값이 옵셔널이 아니더라도 옵셔널이 된다.
- 상위 레벨과 현재 레벨이 모두 옵셔널이라고 해서 더 옵셔널해지지는 않는다.
Optinal(Optinal(Optional(..))) X
- 옵셔널 체이닝을 사용하면 반환값은 무조건 옵셔널이다.
- 옵셔널을 반환하는 메서드가 체이닝에 물려 있을 경우 다음과 같이 사용한다.
someClass?.someMethodA()?.someMethodB()?. ...
Author And Source
이 문제에 관하여(wift 정리 - Optional Chaining), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yy0867/Swift-정리-Optional-Chaining저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)