- 배너/최근/신규/큐레이션 섹션 UI 구성 및 데이터 바인딩 - 네트워크 이미지 로더를 Kingfisher(KFImage)로 교체하여 캐싱/재시도 지원 - CharacterApi에 토큰 헤더 포함, GET /api/chat/character/main 연동
		
			
				
	
	
		
			41 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
//
 | 
						|
//  RecentCharacterItemView.swift
 | 
						|
//  SodaLive
 | 
						|
//
 | 
						|
//  Created by klaus on 8/29/25.
 | 
						|
//
 | 
						|
 | 
						|
import SwiftUI
 | 
						|
import Kingfisher
 | 
						|
 | 
						|
struct RecentCharacterItemView: View {
 | 
						|
    let character: RecentCharacter
 | 
						|
    
 | 
						|
    var body: some View {
 | 
						|
        VStack(spacing: 6) {
 | 
						|
            KFImage(URL(string: character.imageUrl))
 | 
						|
                .placeholder { Circle().fill(Color.gray.opacity(0.2)) }
 | 
						|
                .retry(maxCount: 2, interval: .seconds(1))
 | 
						|
                .cancelOnDisappear(true)
 | 
						|
                .resizable()
 | 
						|
                .scaledToFill()
 | 
						|
                .frame(width: 76, height: 76)
 | 
						|
                .clipShape(Circle())
 | 
						|
            
 | 
						|
            Text(character.name)
 | 
						|
                .font(.custom(Font.preRegular.rawValue, size: 18))
 | 
						|
                .foregroundColor(.white)
 | 
						|
                .lineLimit(1)
 | 
						|
                .frame(maxWidth: 76)
 | 
						|
                .multilineTextAlignment(.center)
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
#Preview {
 | 
						|
    RecentCharacterItemView(
 | 
						|
        character: RecentCharacter(characterId: 1, name: "앨리스", imageUrl: "https://picsum.photos/200")
 | 
						|
    )
 | 
						|
    .background(Color.black)
 | 
						|
}
 |