https://explorer89.tistory.com/321
genre_ids 의 Int 타입의 배열에 맞는 genre 찾기
📌 해결해야 할 문제1️⃣ 영화 목록 내 genre_ids의 값을 받아옴{ "page": 1, "results": [ { ... "genre_ids": [ 27, 53 ], ... }, 2️⃣ 장르의 값을 TMDB API를 통해 받아옴{ "genres": [ { "id": 27, "name": "공포" }, ... }, {
explorer89.tistory.com
✅ 위의 블로그와 이어진 내용
📌 특정 장르 이름을 커스텀 변환하여 한글로 표시하기
현재 getTVGenre()에서 가져오는 genre.name이 영어로 반환되는 경우가 있음
예를 들어 "Action & Adventure" → "액션 & 모험"로 변경하려면,
✅ 특정 영어 장르 이름을 한글로 변환하는 매핑 딕셔너리를 생성 필요
🚀 해결 방법
- 장르 변환 딕셔너리(genreTranslation)를 만들어서 특정 장르를 한글로 변환
- TV 데이터의 genreNames를 설정할 때, 변환 딕셔너리를 적용하여 한글로 변경
- CollectionViewCell에서 변경된 한글 장르를 표시하도록 업데이트
🔹 Step 1: 장르 변환 딕셔너리 추가
let genreTranslation: [String: String] = [
"War & Politics": "전쟁 & 정치",
"Action & Adventure": "액션 & 모험",
"Sci-Fi & Fantasy": "SF & 판타지",
"Kids": "어린이",
"News": "뉴스",
"Reality": "리얼리티",
"Soap": "연속극"
]
🔹 Step 2: fetchMediaData()에서 장르 변환 적용
✅ genreTranslation[genre.name] ?? genre.name → 한글로 변환할 수 있으면 변환하고, 없으면 원래 값 유지
private func fetchMediaData() {
Task {
do {
// ✅ 1. 트렌딩 TV 목록 가져오기
var trendingTVs = try await NetworkManager.shared.getTrendingTVs()
// ✅ 2. 트렌딩 TV 장르 목록 가져오기
let tvGenres = try await NetworkManager.shared.getTVGenre()
// ✅ 3. 각 TV의 genreIds를 genreNames로 변환 (한글 적용)
for i in 0..<trendingTVs.count {
let tv = trendingTVs[i]
let matchedGenres = tv.genreIDS.compactMap { genreId in
if let genre = tvGenres.first(where: { $0.id == genreId }) {
return genreTranslation[genre.name] ?? genre.name // ✅ 한글 변환 적용
}
return nil
}
// ✅ 장르 이름 저장
trendingTVs[i].genreNames = matchedGenres
}
// ✅ 4. HomeViewController의 데이터 업데이트
HomeViewController.homeSections = [
.trendingTVs(trendingTVs)
]
DispatchQueue.main.async {
self.homeFeedTableView.reloadData()
}
} catch {
print("Failed to fetch data: \(error)")
}
}
}
🔹 Step 3: CollectionViewCell에서 수정된 장르 표시
✅ 이제 특정 장르가 한글로 변환되어 CollectionViewCell에서 표시됨!
🔥추가로 변환할 장르가 있으면 genreTranslation에 추가하면 됨 🔥
func configureCollectionView(_ tv: TVResult) {
titleLabel.text = tv.name
releasedDateLabel.text = formatDateString(tv.firstAirDate)
let score = (tv.voteAverage)
if score != 0 {
scoreLabel.configure(with: Int(score * 10))
} else {
scoreLabel.configure(with: 100)
}
let posterPath = tv.posterPath
guard let url = URL(string: "https://image.tmdb.org/t/p/w500/\(posterPath)") else { return }
posterImageView.sd_setImage(with: url, completed: nil)
// ✅ 장르를 " / "로 구분하여 표시
if let genres = tv.genreNames, !genres.isEmpty {
genreLabel.text = genres.joined(separator: " / ") // ✅ "전쟁 & 정치 / 액션 & 모험" 형식으로 표시
} else {
genreLabel.text = "장르 없음"
}
}
'Project > MovieClip' 카테고리의 다른 글
에러 발생 - 예상치 못한 데이터 값 발생 (0) | 2025.02.07 |
---|---|
테이블의 섹션 별로 다르게 UI 구성 (0) | 2025.02.07 |
genre_ids 의 Int 타입의 배열에 맞는 genre 찾기 (0) | 2025.02.06 |
테이블 섹션 별 데이터 모델 사용 (0) | 2025.02.06 |
에러 발생 - 데이터 모델 누락 (0) | 2025.02.05 |