Home

Dex (7)

능력치 데이터를 다루기 위한 모델 확장 지난 글에서는 포켓몬 타입에 따라 배경 이미지를 지정하는 속성을 확장했다. 이번에는 능력치 데이터를 더 쉽게 다룰 수 있도록, typeColor, stats, highestStat 등의 속성을 Pokemon 모델에 추가한다. extension Pokemon { // 생략 var typeColor: Color { Color(types![0].capitalized) } var stats: [Stat] { [ Stat(id: 1, name: "HP", value: hp), ...

Read more

Dex (6)

PokemonDetailView 이제는 DetailView를 만들어 본다. 디자인은 이렇게 할 예정 Preview용 SampleData 생성 그전에 샘플 데이터를 먼저 만들어줄것이다. static var previewPokemon: Pokemon { let context = PersistenceController.preview.container.viewContext } @MainActor static let preview: PersistenceController = { // 생략 } 이렇게 코드를 작성하자마자 발생하는 에러 @MainActor로 선언된 preview는 M...

Read more

Dex (5)

앱 실행 시 데이터 자동 로드 지금까지는 사용자가 + 버튼을 눌러야만 1번부터 151번까지의 포켓몬 데이터를 가져올 수 있었다. 이제는 앱 실행 시점에 자동으로 데이터를 불러오도록 해보자. UIKit을 사용해봤다면, 이 시점에서 자연스럽게 ViewController 생명주기를 떠올렸을 것이다. 대부분은 viewDidLoad에서 데이터를 불러오는 식으로 처리했을 것이다. 이후의 작업 흐름에 따라 viewWillAppear, viewDidAppear 등 적절한 생명주기를 선택해 사용했을 것이다. 출처: Medium 하지만 우리는 SwiftUI를 사용 중이다. SwiftUI에서는 viewDidLo...

Read more

Dex (4)

Fetch struct FetchService { enum FetchError: Error { case badResponse } private let baseURL = URL(string: "https://pokeapi.co/api/v2/pokemon")! func fetchPokemon(_ id: Int) async throws -> FetchedPokemon { let fetchURL = baseURL.appending(path: String(id)) let (data, response) = try ...

Read more

Dex (3)

이전 글에서 모델 구조와 CodingKeys를 정리했으니, 이번에는 직접 init에서 decoding을 더 자세히 알아본다. 코드 분석 이제 Json 구조와 함께 코드를 보면서 알아보자 Json 구조의 경우나머지는 생략하고 필요한 부분만 가져온다. 코드 역시도 필요한 부분만 가져오도록 한다. 이때 둘다 //생략 이라는 주석은 빼고 적도록 하겠다. 1. id, name Json 구조 { "id": 1, "name": "bulbasaur" } Code Json 구조상 간단하게 Decoding을 할 수 없기에 Container를 사용해야함. (JsonDecoder 사용❌) enum Codi...

Read more

Dex (2)

CoreData로 부터 Fetch 그전에 Controller에서 마지막 부분에 container.viewContext.mergePolicy = NSMergePolicy.mergeByPropertyStoreTrump MergePolicy를 추가해주자. Docs 참고 Merge Policy 설명 우선순위 사용 예시 NSMergeByPropertyObjectTrumpMergePolicy 메모리(Context)의 변경값이 저장소(Store) 값을 덮어씀 메모리 우선 사용자가 입력한 최...

Read more

Dex (1)

이번엔 CoreData를 사용하는 프로젝트이다. 물론 이전에 나름 열심히 글을 작성했던 적이 있다. 다시 한번 읽어보면 좋을듯 다시 돌아와서 뭐 알겠지만 프로젝트를 생성할때 이렇게 Storage에서 미리 선택을 하여 프로젝트 생성이 가능하다. 그러면 기본적으로 코드가 자동으로 생성이 된채로 프로젝트가 만들어지게 된다. 그리고 이번엔 Swift6로 버전업을 하고 코드를 작성한다. 이후 필요한 이미지들을 Assets에 추가해준다. 그리고 api는 Pokeapi 이걸 사용한다. Entity 만들기 기본적으로 알고 있는 Entity 및 Atrributes 만들기 이다. Json을 보고 필요...

Read more

BB Quotes (fin)

Version 2로 업그레이드 이어서 계속 작성해보도록 한다 4. Extenstion을 사용하여 코드 간소화 현재 Image(show.lowercased().replacingOccurrences(of: " ", with: "")) 이런식으로 코드가 약간 길어지는것을 Extension을 활용하여 조금 간소화를 해보도록 한다. 이렇게 Extension으로 관리를하면 View 쪽은 코드가 간략하여 유지 보수 하기에 용이해진다. extension String { func removeSpaces() -> String { self.replacingOccurrences(of: " ", wi...

Read more