Open Do-hyun-Kim opened 1 year ago
.
(dot)을 통해 내부 프로퍼티나 메서드에 연속적으로 접근할 때 옵셔널 값이 하나라도 껴있으면 옵셔널 체이닝?
를 써줌struct Address {
var email: String
var phone: String
}
struct Human {
var name: String
var info: Address
init(name: String, email: String, phone: String) {
self.name = name
info = Address(email: email, phone: phone)
}
}
var me: Human? = Human(name: "knockknock", email: "knock@naver.com", phone: "010-1234-5678")
me?.info.phone // "010-1234-5678"
me = nil
me?.info.phone // nil
??
을 사용한다.?? 이후의 값
을 반환한다.
a ?? b
에서 옵셔널 a에 값이 있으면 a를 풀고, a가 nil이면 기본값 b를 반환한다.var name: String? = "knockknock"
// 기존 옵셔널 바인딩 이용
if let name = name {
print("hello, \(name)")
} else {
print("hello, what's your name?")
}
// Nil-coalescing 이용
// 1. name에 값이 있는 경우
print("hello, " + (name ?? "what's your name?")) // hello, knockknock
name = nil
// 2. name에 값이 없는 경우
print("hello, " + (name ?? "what's your name?")) // hello, what's your name?
nil이면 nil을 반환
하지만, nil-coalescing operator는 nil이면 nil일 때 나오도록 설정한 기본값을 출력
한다.?
을 사용하지만, nil-coalescing operator은 ??
을 쓴다.?
를 생략한다.
?
사용 가능struct Address {
var email: String
var phone: String?
}
struct Human {
var name: String
var info: Address
init(name: String, email: String, phone: String) {
self.name = name
info = Address(email: email, phone: phone)
}
}
var me: Human? = Human(name: "knockknock", email: "knock@naver.com", phone: "010-1234-5678")
me?.info.phone? // (X) error : '?' must be followed by a call, member lookup, or subscript
me?.info.phone // (O) "010-1234-5678"
me?.info.phone?.count // (O) 13
me = nil
me?.info.phone // nil
// me가 nil이므로 info, phone 표현식은 평가하지 않고 nil을 리턴하여 바로 종료한다.
a??b
중 a의 타입은 optional이어야한다. 또한, b의 타입은 a가 optional이 아닐 때의 타입과 같아야 한다.
Optional Chaining과 nil-coalescing operator(??)의 차이점과 사용 시 주의사항은 무엇인가요?
⛓️ Optional Chaining
Optional Chaining
은Optional
이 될 수 있는 속성(properties
), 메소드(Method
), 서브스크립트(subscript
) 조회하고 호출하는 과정이다.properties
), 메서드(Method
), 서브스크립트(subscript
) 등을 호출 할 수 있으며, 옵셔널이nil
이라면nil
을 반환 한다.Optional Chaining
은Optional
을 반복 사용하여 체인처럼 서로 꼬리를 물고 있는 모양을 옵셔널 체이닝이라고 합니다.❓ nil-coalescing operator
nil-coalescing operator
란, Optional Variable 혹은 Optional Constant에 대해서 값이nil
인 지 확인 후 참 이라면 미리 정의해 둔 값을 할당 시키는 연산자 이다.A ?? B
의 형태로 사용하며, 여기서 A가Optional
, B는 A가 nil일 경우 할당 되는 값이 된다.nil-coalescing operator
는 사용하기 매우 간편하며, 안전성이 보장 되기 때문에 즉 값 할당시 옵셔널 체크 할 수 있다는 장점을 가지고 있다.🧑💻 Optional Chaining과 nil-coalescing operator의 차이점과 사용 시 주의사항
Optional Chaining
에서 만약 체이닝 중에 하나라도nil
이라면 결과 적으로nil
을 반환하게 됩니다. 때문에nil-coalescing operator
을 사용하여nil
일 경우 기본 값을 미리 정의해 둔 값을 할당 시켜 두는 것이 안전성을 보장 받을 수 있습니다.Optional Chaining
은 사용하게 된다면 많은properties
,Method
,subscript
를 연쇄적으로 호출하기 때문에 가독성이 떨어 지게 됩니다. 때문에 필요한 경우가 아니면Optional Binding
,nil-coalescing operator
를 사용하는 것이 가독성 측면에서 효율적일 것입니다.Optional Chaining
,nil-coalescing operator
의 차이점은Optional Chaining
같은 경우 체이닝 과정에서 하나라도 nil이라면 결과 적으로 nil을 반환 하거나 혹은 체이닝이 성공 하였더라도 Optional Type으로 반환 하게 되지만nil-coalescing operator
같은 경우force unwrapping
된 값을 반환 시켜 주게 됩니다.📝 참고 사이트