전체 글 (381) 썸네일형 리스트형 🤔 Future란? (Combine의 비동기 처리) https://developer.apple.com/documentation/combine/future Future | Apple Developer DocumentationA publisher that eventually produces a single value and then finishes or fails.developer.apple.com 🚀 Future란? (초보자를 위한 쉬운 설명)Future는 한 번만 데이터를 방출(emit)하는 Combine의 Publisher.즉, 비동기 작업을 수행하고 결과(성공 or 실패)를 한 번만 전달한 후 종료하는 역할 💡 예제:네트워크 요청 후 응답을 받으면 결과를 반환비동기 작업(예: 파일 다운로드, 인증 처리 등) 후 단 한 번만 값을 반환 📌 Futu.. 🔥 Firebase의 회원가입 (이메일&비밀번호 / 소셜로그인) // ✅ 소셜 로그인 (Facebook, Google, Apple 등)func signIn(with credential: AuthCredential) -> AnyPublisher { return Future { promise in Auth.auth().signIn(with: credential) { authResult, error in if let error = error { promise(.failure(error)) // 에러 처리 } else if let user = authResult?.user { promise(.success(user)) // 성공 } .. ❌ 문제 해결 - 검색 결과의 상세페이지 이동이 안됨.. ✅ NavigationController에서 push가 안 되는 이유 & 해결 방법🚀 현재 didSelectItemAt은 잘 호출되고 있지만, pushViewController가 동작하지 않는 문제👉 이유: SearchResultViewController는 UISearchController의 searchResultsController로 설정되어 있어서 네비게이션 스택에 포함되지 않음!👉 따라서 pushViewController가 동작하지 않음! 🔥 해결 방법: navigationController로 감싸서 Push 가능하게 만들기✅ 1. present()가 아니라 pushViewController()를 사용하고 싶다면?✔ DetailViewController를 UINavigationControll.. 🔨 검색결과 내의 영화, 티비의 장르 가져오는 부분 개선 📍 현재 장르 정보가 늦게 나옴... (좌측) / 이제는 잘 나옴 (우측)✅ 검색 결과에서 장르 정보를 가져오는 코드 검토 & 개선점class SearchViewModel: ObservableObject { ... @Published var fetchedGenres: [Int: [String]] = [:] // 장르 저장 변수 // MARK: - 검색 실행 func search(query: String) { currentQuery = query resetState() Task { do { let results = try await searchServ.. 🔥 MVVM + Combine을 통한 검색기능 구현 2편 구현 순서? ✅ MVVM + Combine + UISearchViewController를 사용한 검색 기능 구현 순서 📍 Network 설정 TMDB API를 통해 데이터를 가져올 함수 구현// MARK: - APICallerclass NetworkManager { static let shared = NetworkManager() ... // MARK: - Search /// 검색어를 통해 영화 목록 결과 func searchMovie(with keyword: String, page: Int = 1) async throws -> SearchResultMedia { let url = URL(string: "\(Constants.base.. 🤔 createDataSource() 메서드에서 "검색 결과 전체보기" 버튼 동작 🔹 1. SearchFooterView의 역할📌 SearchFooterView는 UICollectionView의 각 섹션(영화, TV, 인물) 하단에 추가되는 버튼을 포함하는 뷰📌 "검색 결과 전체보기" 버튼을 누르면, 추가 데이터를 로드할 수 있도록 loadMoreAction 클로저를 실행하는 구조class SearchFooterView: UICollectionReusableView { // MARK: - Variable static let reuseIdentifier: String = "SearchFooterView" private var loadMoreAction: (() -> Void)? // MARK: - UI Component let.. 🤔 reloadData() 함수의 역할 및 동작 방식 ✅ reloadData() 함수의 역할 및 동작 방식이 함수가 실행되면 UICollectionViewDiffableDataSource를 업데이트하여 최신 검색 결과를 UI에 표시 🔹 1. reloadData() 함수의 전체적인 흐름private func reloadData() { // 📌 새로운 snapshot을 생성하여 기존 데이터를 리셋 var snapshot = NSDiffableDataSourceSnapshot() if !viewModel.movies.isEmpty { // 📌 movies 데이터가 있다면 .movie 섹션을 추가 (tvShows, people 동일) snapshot.appendSections([.movie]) .. 🔥 MVVM + Combine을 통한 검색기능 구현 1편 패턴 비교 🎯 UISearchController를 활용한 검색 화면 아키텍처 선택: MVVM vs. MVC ✅ MVC 패턴 vs. MVVM 패턴 비교1️⃣ MVC (Model-View-Controller)✅ 장점:비교적 간단하고 빠르게 개발 가능UIKit의 기본 패턴이므로 익숙함❌ 단점:ViewController에 로직이 집중됨 → 거대한 ViewController(= Massive View Controller) 문제가 발생테스트하기 어렵고, 유지보수가 어려워짐💡 적합한 경우:검색 기능이 간단하고, 데이터 처리 로직이 복잡하지 않을 때검색 결과를 바로 네트워크에서 받아와서 UI에 반영하는 경우2️⃣ MVVM (Model-View-ViewModel)✅ 장점:ViewController의 역할을 줄이고, 로직을 Vi.. 이전 1 ··· 3 4 5 6 7 8 9 ··· 48 다음 목록 더보기