개발
-
Rxswift 네트워크 에러 핸들링개발/Swift 2023. 4. 2. 15:00
public func checkSignUpID(loginID: String) -> Observable 위 함수는 네트워킹을 통해 Bool 타입을 Obseravle로 감싸 리턴해준다. 해당 타입은 true, false ,error 를 Obervable에 감싸 리턴한다. 요구 조건은 다음과 같다. 에러가 발생해도 VC의 구독이 끊기면 안된다. false와 error 모두 다른 핸들링이 필요하다. 일반적으로 사용하면 checkSignUpID() 에서 에러 발생시 구독이 끊긴다. 그러면 다시 요청했을때 아무런 이벤트가 발생 하지 않는다 구독이 끊기지 않게 하기 위해서 catch를 사용해 다시 Observable을 리턴해줘여한다. let subscribe = validSignUpID(loginID: loginID..
-
Rx + TableView(CollectionView) 바인딩 안되는 오류 해결방법개발/Swift 2023. 3. 21. 18:25
1. TableView에서 발생 (제약조건) dataSubject.bind(to: tableView.rx.items) { tableView, row, element in print("Test") return UITableViewCell() }.disposed(by: disposeBag) dataSubjecgt에 값을 아무리 집어 넣어도 위의 셀을 리턴하는 클로저가 호출이 계속안됨 tableView.register(IDIntergrationAuthCell.self, forCellReuseIdentifier: IDIntergrationAuthCell.id) tableView.rx.setDelegate(self).disposed(by: disposeBag) 레지스터와 delegate 모두 빠지지 않은 상태 (..
-
[Swift] 직접 UITableView를 구현하기개발/Swift 2023. 1. 12. 17:04
스크롤 구현 방식 스크롤을 구현하기 위해 UIstackView를 통해 UI들을 집어넣고 UIPanGesture를 통해 터치이벤트를 받아 스크롤을 구현 했습니다. for i in 1.. UIImageView? { guard let image = UIImage(named: "image\\(index)") else {return nil} let imageView = UIImageView(image: image) imageView.translatesAutoresizingMaskIntoConstraints = false imageView.heightAnchor.constraint(equalToConstant: cellHeight).isActive = true return imageView } init에서 초기 1..
-
[Swift] 다양한 데이터 타입 동적으로 Decoding 하기개발/Swift 2023. 1. 9. 17:55
위 데이터 처럼 하나의 리스트에 다른 타입의 데이터를 받아오는 경우가 있다. 이때 해당 데이터를 디코딩할때 문제를 겪게된다. 해결 할수 있는 방법은 위와 같이 모든 프로퍼티들을 옵셔널하게 주는 방법이 있다. 그러면 디코딩 한 결과는 옵셔널 하며 데이터 혹은 nil 이 들어갈것이다. 이런 경우 문제점은 프로퍼티가 모두 옵셔널 하기 때문에 언래핑을 꼭 해줘야 한다는것이다. 더 좋은 방식은 해당 타입을 나누어 다른 타입으로 구현해내는 것이다. 어느 방식으로든 분기를 태워서 A타입, B타입으로 나누어 필요한 프로퍼티만 설정해주는것이다. enum CellItem: Decodable , Hashable{ case company(Company) case horizontal(Horizontal) case none en..
-
외부 영역 터치시 키보드 사라지게 하는방법 in TableView개발/Swift 2022. 12. 5. 14:22
키보드를 입력중에 다른 영역을 터치하면 키보드가 사라지기를 원할수 있다. 이때 가장 쉬운 방법으로 이렇게 구현한다 //VC private func setDismissKeyboardEvent() { let gesture = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard)) self.view.addGestureRecognizer(gesture) } @objc private func dismissKeyboard() { self.view.endEditing(true) } Viewcontroller의 뷰에 제스처를 부여해서 endEditing을 호출하면 키보드가 알아서 껒여준다. 그런데 여기서 문제점이 있다. 만약 view 안에 테이..
-
Compositional Layout + Diffable DataSource - 2 헤더 추가하기개발/Swift 2022. 11. 27. 15:35
헤더 추가하기 우선 새로운 타입 sqaure carousel 섹션을 추가했다. 여기서는 새로운 타입의 아이템을 넣어줬다. enum Item: Hashable { case banner(HomeItem) case normalCarousel(HomeItem) case squareCarousel(RestaurantItem) } struct RestaurantItem: Hashable { let name: String let reviewPoint: Float let reviewCount: Int let imageUrl: String } 이러면 데이터소스에 넣어줄때 RestaurantItem 타입을 넣어주고 cell 그릴때 RestaurantItem 타입의 데이터를 받아 사용할수 있다. //스냅샷 부분 snapsh..
-
Compositional Layout + Diffable DataSource - 1 (배너타입, 작은 리스트)개발/Swift 2022. 11. 25. 18:14
쿠팡이츠 메인 피드 화면처럼 콜렉션뷰를 구현해보려 한다. 맨위에 배너가 있고 그 아래 작은 리스트, 그 아래 사각형의 리스트가있다. 그리고 특이점은 모든 형태가 다 다른 타입의 데이터를 가지고 있다 배너 - 배너 작은 리스트 - 음식종류(category) 사각형 리스트 - 식당이름(restaurant) Section으로 섹션 타입을 구분하지 않고 Item 으로 구분하기로 했다. struct Section: Hashable { let id: String } enum Item: Hashable { case banner(HomeItem) case normalCarousel(HomeItem) case circleCarousel(HomeItem) } struct HomeItem: Hashable { var tex..
-
[Swift] Compositional Layout - DiffableDataSource 와 함께 사용개발/Swift 2022. 11. 23. 17:00
Modern Collection View 와 MVVM 패턴 가이드 [iOS] Swift Modern Collection View & MVVM 패턴 가이드 강의 - 인프런 MVVM 패턴과 Modern Collection View를 사용해 네트워킹을 구현하고, 다양하고 동적인 Collection View를 자유자재로 다룰 수 있게 됩니다., Swift iOS UI, 제대로 다루는 핵심 기술! 📲 iOS Swift 레이아웃 구현을 www.inflearn.com 기존 datasource 구조에서 data controller 와 UI 가 상호작용하면 서 collectionview가 구성되는데 시간이 지남에따라 외부적인 변동으로 인해 controller가 가진 “Truth”와 UI가 가진 “Truth”가 맞지 않게..