오늘은 Combine을 사용하면서 assign과 sink의 차이가 흥미로워 기록으로 남겨두려고 한다. 먼저 Combine을 사용하면서 이전에 구현했던 방식이 이렇게 구현된다는게 너무 재밌다.. 뭔가 되게 살아있는 무언가를 키우는 느낌이랄까 이런 재미가 있다가 새로운걸 알게 되면 또 이런 재미가 있고.. 아무튼 두가지의 데이터 처리 방법에 대해서 알아보고 어떤 차이가 있는지 살펴보자! assignhttps://developer.apple.com/documentation/combine/publishers/comparison/assign(to:)/먼저 assign에 대해서 살펴보면 이 메서드를 통해 Publisher의 출력값을 직접 객체의 프로퍼티에 간단하고 직관적이게 할당할 수 있는 기능을 가지고 있다. 퍼..
2024.04.16 - [◽️ Programming/iOS] - iOS Result 타입 (예외처리) iOS Result 타입 (예외처리)Result 타입 이란? 함수나 메서드에서 성공 또는 실패를 반환하는데 사용되는 형식이며, 주로 비동기 작업 진행 시 사용된다. Swift5 에서 새로 추가된 Result Type를 이해하기 위해선 열거형 , 연관값,dongdida.tistory.com 이전에 한번 알아보았던 Result Type에 대해서 다시 한번 짚고 넘어가보자 정의를 한번 다시 정리하고 이번에 Modern CollectionView를 만들었던 영화 정보를 가져오는 방식에 적용해보려고 한다! 먼저 Result 타입은 Swift5.0에서 새로 추가된 에러처리 방법이다. 에러가 발생하는 경우 에러를 ..
SwiftData는 WWDC2023에서 소개된 최신 데이터 관리 프레임워크이다. SwiftData는 기존에 자주 사용했던 CoreData를 기반으로 하지만 Swift 언어를 활용해 CoreData보다 훨씬 쉽고 직관적인 기능을 제공한다.https://developer.apple.com/documentation/swiftdata SwiftData | Apple Developer DocumentationWrite your model code declaratively to add managed persistence and efficient model fetching.developer.apple.com 먼저 SwiftData는 Swift의 속성래퍼를 활용해 데이터 모델을 정의한다. @Model 을 사용해 클래스..
3가지 각 다른 컬렉션뷰를 활용해 영화 정보를 가져오는 방식을 구현하고자 한다. CompositionalLayout과 DiffableDataSource를 활용해 유연하고 다양한 컬렉션뷰를 구현하는 방식에 대해서 알아보자! 먼저 각 다른 컬렉션 뷰를 활용하기 위해 enum을 활용해 3가지로 섹션을 분류한다.enum Section: Hashable { case banner case horizontal(String) case vertical(String)}enum Item: Hashable { case normal(Content) case bigImage(Movie) case list(Movie)}크게 구성될 배너 부분과 가로로 움직일 호리젠탈, 그리고 밑으로 3가지의 영화가 ..
오늘은 가장 많이 사용하고 기본이 되는 TableView, CollectionView를 이전에 Delegate , DataSource를 사용해서 구현하는 것이 아닌 RxSwift를 사용해서 구현하는 것을 해보았다 ㅎㅎ 이전에 RxSwift를 사용하지 않고 구현하던 방식과 RxSwift를 사용하는 방식을 비교하면서 구현해보니 슬슬 RxSwift를 활용해서 구현하는 방식이 감이 오는 것 같다 :) 하나하나 살펴보자! TableVIew먼저 테이블 뷰를 구성할 더미 데이터를 만들어 주었다.struct Product { let imageName: String let title: String}그 다음 데이터를 보내 줄 ViewModel를 구현한다.struct ProductViewModel { var..
TMDB에 있는 TV, MOVIE 정보를 가져와 보여주는 과정을 RxSwift와 RxAlamofire를 사용해서 한번 구현해 보려고 한다. 모델링 구현먼저 데이터 모델링 구성을 살펴보면 TV와 MOVIE는 거의 동일하므로 하나만 살펴보도록 하자import Foundationstruct TVListModel: Decodable { let page: Int let results: [TV]}struct TV: Decodable { let name: String let overview: String let posterURL: String let vote: String let firstAirDate: String private enum CodingKeys: Str..
DiffableDataSource, MVVM, RxSwift 를 사용하는 간단한 프로젝트를 구현해보는 과정에서 데이터 모델링을 구현하고 있었는데 Hashable 프로토콜을 선언해 모델을 구현하는 점이 확인되어 이 개념을 알고 넘어가려고 한다.struct Section: Hashable { let id: String}enum Item: Hashable { case banner(HomeItem) case normalCarousel(HomeItem) case listCarousel(HomeItem)}struct HomeItem: Hashable { let title: String let subTitle: String? let imageUrl: String}이렇게 데이터 모..
SwiftUI를 접하면서 이 Wrapper를 활용해서 데이터 변동을 관리하는 내용이 나에겐 아주아주 흥미로운 것 같다 프로젝트를 진행하며 역할을 줄때마다 재밌다..오늘은 이전에 살짝 어떤 차이가 있나 알아봤지만 오늘은 자세하게 한번 파보려고 한다. 간단한 iOS 기기 목록을 나타내는 방식으로 해당 내용을 정리해 보도록 하자! @StateObject먼저 이 StateObject는 SwiftUI에서 뷰의 수명동안 객체의 상태를 소유하고 관리하는 역할을 담당한다. 그렇기 때문에 StateObject는 부모뷰에서 View가 처음 생성되어 초기화 할때 주로 사용된다는 특징을 가지고 있다! 먼저 더미 데이터 모델을 만들어보자import Foundationstruct iOSdeviceModel: Identifiabl..
오늘은 .There이라는 공유 앨범을 만들어주는 새로운 프로젝트가 시작되어 기록으로 남겨두려고 한다. 이 프로젝트는 처음으로 SwiftUI로만 구현할 예정이며, 나아가 반응형 프로그래밍인 Combine도 활용해 보려고 한다. 먼저 SwiftUI로 UI를 구성하기 시작했는데 UIKit으로 그리는 것보다 훨씬 더 내 스타일이고 오랜만에 정말 재밌게 코드를 작성한 것 같다! 내가 맡은 부분은 메인페이지인 .there 페이지와 .List 페이지의 UI 구성을 맡아 진행하였다.일단 아직 저장되는 데이터는 없기 때문에 더미 데이터를 사용해 채워갈 예정이다. View 분리하며 UI 구성하기SwiftUI를 하면서 가장 좋은 점은 재사용성과 생산성인 것 같다. 이 점을 극대화 할 수 있도록 하나의 뷰 안에서도 세분화해 ..
오늘은 SwiftUI 중에서 propertyWrapper 로 사용되는 것들 중 가장 기초가 되는 State, Binding에 대해서 다시 한번 정리할 겸 글을 작성해보려고 한다. State먼저 SwiftUI에서 State는 뷰의 상태를 관리하는데 사용된다. 뷰 내부에서만 사용되는 상태이며, 상태가 변경되면 해당 상태를 사용하는 뷰가 다시 렌더링 된다. 보통 뷰의 로컬 상태를 관리하는데 사용되며 private를 사용하고 뷰의 최상단에서 관리되어야 한다.이로 인해서 상태 관리가 뷰 내부에 캡슐화 되어 더욱 안전하게 관리 될 수 있게 된다. 예제코드로 살펴보자struct StateBasic: View { @State var backgroundColor: Color = Color.green @Stat..