반응형
키 경로를 사용하여 코드를 더 읽기 쉽고 효율적으로 만드는 방법을 소개하도록 하겠습니다.
다음과 같이 회사의 이름 및 public 여부 등을 나타내는 Company struct가 있다고 해보겠습니다.
struct Company {
let name: String
let isPublic: Bool
let stockPrice: Int
}
let companies: [Company] = [
Company(name: "Apple", isPublic: true, stockPrice: 140),
Company(name: "Facebook", isPublic: true, stockPrice: 12),
Company(name: "Google", isPublic: false, stockPrice: 333),
Company(name: "Tesla", isPublic: false, stockPrice: 1200),
Company(name: "Visa", isPublic: true, stockPrice: 1222)
]
이중에서 isPublic한 회사를 추출하고 싶을 때 기존에는 아래와 같이 확인할 수 있었는데요
func getPublicCompany() {
let publicCompanies = companies.filter { company in
company.isPublic
}.compantMap { company in
company.name
}
print(publicCompanies)
}
["Apple", "Facebook", "Visa"]
위의 방법을
Key Path를 통해 아래와 같이 표현할 수 있습니다. 기존 방식보다 더욱 간결해지고 읽기 쉬운 방식입니다.
func getPublicCompany() {
let publicCompanies = companies.filter(\.isPublic).map(\.name)
print(publicCompanies)
}
["Apple", "Facebook", "Visa"]
만약, filter 부분에 조건이 여러개 필요한 경우라면?
아래와 같이 사용하면 좋을 것 같습니다.
struct Company {
let name: String
let isPublic: Bool
let stockPrice: Int
var shouldSave: Bool {
if isPublic {
return false
}
if stockPrice > 1000 {
return true
}
return false
}
}
func shouldSaveCompany() {
let publicCompanies = companies.filter(\.shouldSave).map(\.name)
print(publicCompanies)
}
["Tesla"]
반응형
'Programming > Swift' 카테고리의 다른 글
[Swift] 취소 가능한 Task를 설정하는 방법 (feat. AnyCancelTaskBag) (0) | 2023.04.26 |
---|---|
[SwiftUI] @StateObject 또는 @ObservedObject 차이점 (0) | 2023.04.18 |
[WWDC2021] Your guide to keyboard layout (0) | 2022.12.14 |
withCheckedContinuation memory leak 현상 및 해결방법 (0) | 2022.11.21 |
[SwiftUI] @Published 사용법 및 @ObservedObject와의 관계 (0) | 2022.10.23 |