iOS 152

공공 API를 통해 데이터를 가져오는 중에 발생한 오류 해결

오류 내용The data couldn’t be read because it isn’t in the correct format.공공 API를 통해 데이터를 불러오는 과정에서 데이터 모델 형식이 맞지 않아 오류가 발생했습니다.   내가 설계한 데이터 모델import Foundation// MARK: - Main Response Modelstruct ImageResponse: Codable { let response: ImageResponseBody}struct ImageResponseBody: Codable { let header: ResponseHeader let body: ImageResponseBodyContent}struct ResponseHeader: Codable { let ..

iOS/Swift 2024.09.21

CollectionView 특정 셀만 업데이트하기

셀 리로드 방식 개선:현재 선택된 카테고리가 변경되면 categoryCollectionView를 리로드하는 방식인데, 전체 셀을 리로드하는 대신에 특정 셀만 리로드하면 성능적으로 더 효율적입니다. 특히 데이터가 많아질 경우 전체를 리로드하는 대신 선택된 셀만 갱신하는 것이 더 좋습니다.  개선 전 코드 homeView.getHomeContentView().categoryCollectionView.customCategoryCollectionView.reloadData()  개선 후 코드 let previousSelectedIndex = placeSelectedIndex // 이전에 선택된 인덱스 저장placeSelectedIndex = indexPath.item // 새로운 선택 인덱스로 업데이트let..

iOS/UIKIT 2024.09.13

데이터 모델 이름을 바꿔야 한다면?

JSON 응답의 구조와 코드에 있는 구조체의 불일치를 해결하기 위해서는 구조체 이름을 유지하면서, 일부 이름을 수정하고 적절한 타입 매핑을 수행해야 합니다.  실제 외부 API를 통해 받아온 데이터 모델 { "response": { "header": { "resultCode": "0000", "resultMsg": "OK" }, "body": { "items": { "item": [ { "contentid": "1095732", "originimgurl": "http://tong.visitkorea.or.kr/cms/resource/67/3035567_image2_1.png", ..

iOS/Swift 2024.09.06

하드코딩 된 쿼리 파라미터 URL 문자열 보다 URLComponents와 URLQueryItem을 사용해보기

리팩토링 전 코드 class NetworkManager { static let shared = NetworkManager() func getCommonData(contentId: String, completion: @escaping (Result) -> Void) { guard let url = URL(string: "\(Constants.base_URL)/areaBasedList1?serviceKey=jlK%2B0ig7iLAbdOuTJsnkp6n0RdeEMtGKsw53jEMbKm3PcB7NFTSeUrnXixogiuvNtHQXeqxgV88buRZvTjG73w%3D%3D&numOfRows=10&pageNo=1&MobileOS=ETC&MobileApp=AppTest&_type=..

iOS/UIKIT 2024.09.04

minimumInteritemSpacing과 minimumLineSpacing 설정 및 위치

1. minimumInteritemSpacing역할: 동일한 행(row)에서 열(column) 사이의 간격을 설정합니다.적용: 여러 열이 있는 경우, 각 열 사이의 간격을 설정합니다.컨텍스트:UICollectionView가 수평 스크롤(horizontal scroll)일 때, 같은 행에 있는 항목들 간의 간격입니다.UICollectionView가 수직 스크롤(vertical scroll)일 때, 같은 열에 있는 항목들 간의 간격입니다.2. minimumLineSpacing역할: 행(row) 간의 간격을 설정합니다.적용: 여러 행이 있는 경우, 각 행 사이의 간격을 설정합니다.컨텍스트:UICollectionView가 수평 스크롤(horizontal scroll)일 때, 각 열 간의 간격입니다.UIColle..

iOS/UIKIT 2024.09.03

커스텀 탭바 내에 있는 아이콘 위치 조절하는 방법

private func createButton(imageName: String, tag: Int) -> UIButton { let button = UIButton(type: .system) // 버튼 구성 설정 var config = UIButton.Configuration.plain() let largeConfig = UIImage.SymbolConfiguration(pointSize: 24, weight: .bold, scale: .medium) config.imagePadding = 0 // 이미지와 텍스트 사이의 간격 config.imagePlacement = .top // 이미지를 텍스트 위에 배치 config.contentInsets = NSDirectio..

iOS/UIKIT 2024.09.01

DispatchQueue.main.async의 사용 위치와 방식에 따른 차이

DispatchQueue.main.async의 사용 위치와 방식이 다르며, 효율성 및 관리 측면에서의 차이점도 발생합니다. 첫 번째 함수에서는  DispathQueue.main.async 내에 UIView 변경을 담당하는 함수 configureData를 불러오고두 번째 함수는 configureData 메서드에서 DispatchQueue.main.async 내에 UIImage 변경하는 요소를 넣었습니다.  1. 첫 번째 함수에서의 DispatchQueue.main.asyncprivate func getCommonData(contentId: String) { NetworkManager.shared.getCommonData(contentId: contentId) { [weak self] results i..

iOS/UIKIT 2024.08.31