본문 바로가기

분류 전체보기

(405)
🔍 SearchController를 통해 검색 기능 구현하기 🔍 구현하려는 상황homeHeaderView에 위치한 searchTextField로부터 입력받은 텍스트를 통해 검색 ✅ searchTextField에서 입력받은 텍스트를 KeywordSearchViewController에 델리게이트 패턴으로 전달 class HomeHeaderView: UIView { // MARK: - Variable weak var delegate: HomeHeaderViewDelegate? ...}extension HomeHeaderView { private func setupGesture() { ... searchButton.addTarget(self, action: #selector(didTappedSEarchButt..
🤔 여러 ViewController에서 위치 권한을 사용할 경우에는? https://explorer89.tistory.com/423 ✅ 위치 정보 및 권한 설정하기https://explorer89.tistory.com/159 위치정보를 받아오는 방법참고 사이트 https://velog.io/@maddie/iOS-UIKit-CoreLocation-%EC%82%AC%EC%9A%A9%EB%B2%95-%EC%A0%95%EB%A6%AC" data-og-host="velog.io" data-og-source-url="https://velog.io/@maddie/iOS-explorer89.tistory.com 🔍 구현하려는 상황 HomeViewController가 위치 권한 요청 및 위치 갱신 로직을 가지고 있고,LocationSearchViewController는 UISheetPr..
✅ 위치 정보 및 권한 설정하기 https://explorer89.tistory.com/159 위치정보를 받아오는 방법참고 사이트 https://velog.io/@maddie/iOS-UIKit-CoreLocation-%EC%82%AC%EC%9A%A9%EB%B2%95-%EC%A0%95%EB%A6%AC" data-og-host="velog.io" data-og-source-url="https://velog.io/@maddie/iOS-UIKit-CoreLocation-%EC%82%AC%EC%9A%A9%EB%B2%95-%EC%A0%95%EB%A6%AC" daexplorer89.tistory.com 이전에 작성한 위치 정보를 받아오는 법에서 좀 더 업데이트 했습니다. ✅ Import CoreLocation 선언import UIKitimport ..
🤔 깃 브랜치 구조는 어떻게 할래? ✅ 지금 네 전략 요약main (또는 master)└─ HomeView (기능 단위 브랜치) └─ HomeHeaderView (서브기능) ├─ HomeHeaderView/UI └─ HomeHeaderView/Function이 구조는 큰 기능을 작은 단위로 쪼개서 관리하는 데 좋아.하지만 혼자 개발할 땐 너무 깊게 나누면 오히려 복잡도 > 생산성이 되는 경우도 있어. ✅ 추천 방식: “기능 브랜치 단순화 + 커밋 단위 분할”main└─ feature/homeView └─ 다양한 커밋 (UI, 기능 등) 큰 단위는 브랜치로 (feature/homeView)그 안에서 세부적인 UI, 기능은 커밋 단위로 구분필요 시 HomeHeaderView, HomeRewardView 등..
✅ collectionview 위에 headerview 구현하기 UICollectionViewCompositionalLayout의 section header는 해당 섹션의 상단까지만 표시됩니다.즉, collectionView 자체의 top 영역까지는 확장하지 못해요. ✅ 구현하려는 UIUICollectionViewCompositionalLayout로 구현 ✅ 방법: UICollectionView 위에 별도로 헤더용 View를 직접 올리기즉, Compositional Layout의 헤더 말고 따로 상단 UI를 구성하는 방식이 방식으로 할 경우에는, headerView는 위치가 고정되어 있고, collectionView만 스크를됨view├── headerContainerView (위쪽 라운드 + 검색 UI)└── collectionView (헤더 밑에) 🔨 head..
@Binding 은 뭐야? @Binding은 뷰 간 상태(State)를 공유할 때 사용하는 속성 래퍼즉, 어떤 상위 뷰(부모)가 가지고 있는 상태 값을 하위 뷰(자식)에서 읽고, 변경할 수 있도록 연결해주는 역할 🔧 간단한 정의@Binding var isSet: Bool이 코드는 isSet이라는 불리언 값을 외부(보통 부모 뷰)로부터 바인딩 받아서 사용하겠다는 뜻→ 즉, 이 뷰 안에서 isSet 값을 변경하면 부모 뷰의 상태 값도 함께 변경 @State = 뷰 내부에서 직접 상태를 소유하고 변경@Binding = 다른 뷰(보통 부모 뷰)의 상태를 참조해서 읽고 쓰기 가능 1. 부모 뷰struct ParentView: View { @State private var isFavorite = false var body:..
@Environment(ModelData.self) var modelData 에서 @Environment는 뭐야? @Environment(ModelData.self) var modelData는 Swift의 새로운 Observation 프레임워크에서 도입된 방식으로,앱의 전역(shared) 상태를 SwiftUI 뷰에서 주입받아 사용하는 방법 🔍 @Environment(ModelData.self) var modelData의 의미이 코드는 ModelData라는 타입의 객체를 환경(Environment)에서 자동으로 주입받는다는 뜻즉, SwiftUI는 앱의 상위 어딘가에 있는 ModelData 인스턴스를 찾아서 이 뷰에 연결 🧠 쉽게 말하면:ModelData는 앱 전체에서 공통으로 사용하는 데이터 모델이 데이터를 뷰 안에서 쓰고 싶을 때, 직접 생성하거나 전달하지 않아도 됨대신 @Environment(ModelData...
@Observable 이 뭐야? @Observable은 Swift의 SwiftData(또는 Observation 프레임워크)에서 도입된 새로운 속성 래퍼로,클래스가 관찰 가능(observable)하도록 만들어주는 역할즉, 해당 클래스의 프로퍼티가 바뀌면 자동으로 뷰에 반영될 수 있게 해주는 도구 ✅ @Observable의 의미@Observableclass ModelData { var landmarks: [Landmark] = load("landmarkData.json")} 이 코드는 ModelData 클래스가 SwiftUI 뷰에서 관찰될 수 있게 한다는 뜻즉, landmarks 배열이 변경되면 이를 사용하는 SwiftUI 뷰가 자동으로 업데이트 🔄 @Observable과 @ObservedObject, @Published의 차이기..