HIT해
[Swift 기초문법 - 41] Optional chaining 본문
728x90
Optional chaining이란?
프로퍼티가 없는 중첩 객체를 에러 없이 안전하게 접근할 수 있는 문법이다.
Optional이란?
데이터가 있을수도 없을 수도 있는 상태
Optional Binding이란?
오류가 없을때 변수에 할당하는 것
if let 사용을 하면
struct Friend {
let nickname: String
let person: Person?
}
struct Person {
let name: String
let pet: Pet?
}
struct Pet{
let name: String?
let kind: String
}
let pet = Pet(name: "개냥이", kind: "고양이")
let person = Person(name: "정대리", pet: pet)
let friend = Friend(nickname: "빡코더", person: person)
if let person : Person = friend.person {
if let pet = person.pet {
if let petName = pet.name {
print("성공")
}
else{
print("실패")
}
}
}
if let 3중 문턱을 통과해야만 변수에 할당이 된다.
가독성은 물론이고 모든 코드를 이렇게 작성한다면 손가락이 아플 것이다.
축약형으로 작성해보자
if let person = friend.person,
let pet = person.pet,
let petName = pet.name {
// 모두 데이터가 있다면
print("성공")
}else{
print("실패")
}
많이 줄었지만 이또한 가독성이 조금은 떨어지는 듯 싶다.
Optional chaning 사용
if let person = friend.person?.pet?.name{
print("성공")
} else{
print("실패")
}
같은 기능을 하지만 한줄로 나타낼 수 있다!
(와! 클린코드!)
guard let 사용
guard let은 함수 안에서 걸렸을때 return으로 함수를 끝내는데에 보통 사용하기 때문애 위와는 반대로 사용한다
func temp() -> Void {
guard let petName = friend.person?.pet?.name else{
print("실패")
return
}
print("\(petName)")
}
너무 깔끔하고 간편한 문법이다.
협업을 할때 사용하면 팀원들의 업무 효율성을 높일 수 있는 좋은 문법인 것 같다.
'Swift > Swift 기초문법' 카테고리의 다른 글
[Swift 기초문법 - 43] Zip (0) | 2024.08.17 |
---|---|
[Swift 기초문법 - 42] Equatable (0) | 2024.08.17 |
[Swift 기초문법 - 40] 콜렉션간 변형 (0) | 2024.08.17 |
[Swift 기초문법 - 39] reduce (0) | 2024.08.17 |
[Swift 기초문법 - 38] 콜렉션 합치기 (0) | 2024.08.16 |