Project/HiddenGem
🤔 고차함수를 통해 외부에서 받아온 데이터에 문구를 추가하는 방법
밤새는 탐험가89
2025. 5. 15. 14:12
✅ 현재 화면에서 보이는 카테고리 부분에 추가 문구를 담는 방법
API를 통해 카테고리를 정보를 받아옴
📋 카테고리 목록:
- 한식
- 서양식
- 일식
- 중식
- 이색음식점
- 카페/전통찻집
- 클럽
위의 문구에 App Store에서 처럼 이모지를 추가하여 UI 구현하려고 함
✅ 해결 방법
원본 카테고리에 추가로 이모지를 합친 새로운 배열 생성
📍 "이모지"와 "카테고리" 담을 데이터 모델 생성
/// 이모지를 폼할할 새 모델
struct CategoryEmogi: Hashable {
let id = UUID()
let name: String
let icon: String
var displayName: String {
return "\(icon) \(name)"
}
}
📍 각 카테고리 별로 이모지를 정할 메서드 선언
func updateCategories() {
let emojiMap: [String: String] = [
"한식": "🍚",
"서양식": "🥩",
"일식": "🍣",
"중식": "🍜",
"이색음식점": "🍤",
"카페/전통찻집": "☕️",
"클럽": "🎧"
]
var newCategories: [CategoryEmogi] = []
for category in categories {
let name = category.name
let icon = emojiMap[name] ?? "🥄"
let categoryEmogi = CategoryEmogi(name: name, icon: icon)
newCategories.append(categoryEmogi)
}
self.emojiCategories = newCategories
}
❓ 만약에 카테고리를 받아올 때 중복이 발생한다면?
func updateCategories() {
let emojiMap: [String: String] = [
"한식": "🍚",
"서양식": "🥩",
"일식": "🍣",
"중식": "🍜",
"이색음식점": "🍤",
"카페/전통찻집": "☕️",
"클럽": "🎧"
]
var seen = Set<String>() // 중복 제거용
var orderedUniqueCategories: [String] = [] // 순서를 유지한 이름 배열
// 1. 중복을 제거하면서 순서를 유지한 카테고리 이름 배열 생성
for category in categories {
let name = category.name
if !seen.contains(name) {
seen.insert(name)
orderedUniqueCategories.append(name)
}
}
// 2. 이모지를 붙여 CategoryEmogi 배열 생성
var result: [CategoryEmogi] = []
for categoryName in orderedUniqueCategories {
let icon = emojiMap[categoryName] ?? "🥄"
let emojiCategory = CategoryEmogi(name: categoryName, icon: icon)
result.append(emojiCategory)
}
// 3. 최종 저장
self.emojiCategories = result
}
✅ 고차함수를 통해 좀 더 축약해본다면?
func updateCategories(){
let emojiMap: [String: String] = [
"한식": "🍚",
"서양식": "🥩",
"일식": "🍣",
"중식": "🍜",
"이색음식점": "🍤",
"카페/전통찻집": "☕️",
"클럽": "🎧"
]
self.emojiCategories = categories.map { category in
let name = category.name
let icon = emojiMap[name] ?? "🍽️"
return CategoryEmogi(name: name, icon: icon)
}
}