본문 바로가기

Swift 공부

(26)
ReactorKit Pulse 분석 기존의 Reactor Kit 에서 state의 값을 사용하게 되면 모든 mutation에 반응하여 state 값이 트리거가 생기게 되고 해당 실행되게 된다. 그래서 의도하지않는 state에 따른 함수 실행을 막기위해 아래와 같이 .distinctUntilChanged() 을 사용하여 방지하였다. reactor.state.map { $0.overseasEmpty } .distinctUntilChanged() .filterNil() .bind(with: self, onNext: { owner, data in owner.myListPager.setEmptyView(index: FavoriteTabItem.overseaRoom.index) }).disposed(by: disposeBag) 매번 새롭게 코드..
Tuist , Swinject , Clean Architecture , MVVM - Coordinator Tuist가 뭔지 너무궁금해!! 로 시작해서 민소네님의 블로그를 보고 Swinject도 너무 궁금해!! 하다보니 모듈화를 해보고싶어!! 가 됬고 어떻게 계층을 나누고 모듈화를 해야하나 싶어서 일단 Clean Architecture를 이용해서 Domain과 네트워크 영역을 나눠보자!! 로 시작된 내 프로젝트... 시작한지는 생각보다 꽤 시간이 지났는데 평일에는 기초공부 , 주말에 지금 작성하고있는 프로젝트를 만들어야지로 시작했는데 이직기간과 맞물리다보니 평일에 기초공부와 과제 , 주말엔 면접 준비 및 개발과제 하다보니 조금씩 조금씩 미뤄줘서 이제야 완성해서 글을 쓰게 된다 해당 프로젝트를 만들면서 기존의 MVVM - Coordinator패턴으로 이뤄졌던 프로젝트에 Tuist , Swinject , Clea..
Hashable , Equatable , Identifiable https://developer.apple.com/documentation/swift/hashable Apple Developer Documentation developer.apple.com Hashable Hashable을 알기전 해쉬값 (Hash Value)을 알아야한다 그래서 해쉬값이란? -> 데이터를 간단한 숫자로 변환한 것 자세히 설명하면 : 원본 데이터를 해쉬 함수 (hash function)을 사용하여 64bit의 Int값으로 변환한 것이다. public protocol Hashable : Equatable { *// Hashable Protocol의 정의* var hashValue: Int { get } func hash(into hasher: inout Hasher) } 그렇다면 Hash..
Tuist 3.x 라이브러리 등록 방법 Tuist 관련 자료들을 보면 모두 버전이 2.x 타겟으로 되어있어 사용할때 디플리케이트 된 함수라고 떠서 머리가 조금 아프다. 그래서 이번에 직접 Doc를 보면서 Tuist 의 사용법을 공부했다. 기존이랑 많이 변하게된 부분이 라이브러리를 사용하는 부분인데 기존의 코드와 다르게 Dependencies 파일을 Tuist에 만들어준 후 SPM으로 사용할 라이브러리를 등록한다. import ProjectDescription let dependencies = Dependencies( swiftPackageManager: .init([ .remote(url: "https://github.com/ReactiveX/RxSwift.git", requirement: .upToNextMajor(from: "6.5.0")..
Tuist 모듈화 공부 4편 클린아키텍처 Tuist를 사용해보자 라는 관점에서 시작됬던 프로젝트가 하나씩 공부하다보니 Tuist를 제대로 사용하기 위해 모듈화가 필요하다 생각이 들었고 모듈화를 공부하다보니 자연스럽게 clean architecture를 접하게 되어 기존의 프로젝트를 clean architecture로 변경하는 과정을 거친후 모듈화를 진행을 할려고한다. 그렇다면 clean architecture가 무엇인가? 내가 설명을 기깔나게 잘한다면 정말 좋겠지만 설명을 못하기에 잘 정리가되어있는 글 들을 첨부한다. https://k-elon.tistory.com/38 Clean Architecture 란 ? 안녕하세요 ! 국산 엘런 입니다 :) Robert C Martin(Uncle Bob) 형님이 블로그에 기재하시면서 화재가 된 것이 Cl..
ViewModel에 Driver를 사용하면 안티패턴? 지난번 면접 질문들을 회고하고 복기하는중 생각이 난 질문이 있는데 MVVM Input Output 패턴을 사용하고있고 Input , Output값을 Driver로 전달하고 있기에 (메인쓰레드에서 사용성을 보장하기위해) ViewModel에서 RxCocoa를 import하고 있는데 RxCocoa를 import를 하고 있는게 안티패턴이라고 한다 (설명을 해주시기에 RxCocoa는 View와 관련된 라이브러리 이기에 안티패턴이라고 한다) 그래서 고민을 면접 당시에는 뭔가 생각이 잘나지 않아 아 그런가요 하고 넘어갔는데 지금와서 생각해보니 조금 이상한게 있다 RxSwift의 Github에 나오는 RxCocoa 소개글 RxCocoa: Provides Cocoa-specific capabilities for gene..
RxSwift Disposable 이란? 지난번 면접에서 RxSwift에 관한 면접 질문을 받던중 Disposable 이란 질문을 받게되었고 항상 사용했지만 답변으로 드리기에 어떤식으로 답변을 드려야하나 생각을 고민해봤고 머리속에서 Observable과 관련된 구독의 메모리 할당을 해제해주는 거구나 라는걸로 알고있는데 평소 답변을 생각을 안해봤고 내가 알고있는 지식이 맞나? 라는 확신이 들지 않으니 자신감있게 말할 자신이 없었고 그래서 답변을 아예 못드리겠다라고 답변을 드렸던것같다. 그러면서 나오는 추가질문인 Disposebag은 언제 메모리 할당을 해제하냐 라는 질문은 deinit되는 시점에 메모리 할당이 해제된다고 말씀드렸는데 이게 맞나 아닌가 싶어서 제대로 공부를 해볼려고한다. 우선 Observable을 subscribe / bind (구..
Property Wrapper 이번에 운이 좋게 좋은기업의 이직 면접을 볼 기회가 있어 기술면접을 보게 되었는데 과제리뷰를 진행하는 과정에서 Property Wrapper를 사용한 코드에 대해 질문을 주셨고 한참을 고민하다가 답변을 드렸는데 잘 몰라서 이상하게 답변을 했고 면접이 끝나고 찾아보니 뭐 당연히 틀린내용을 ㅜㅜ 실패는 성공의 어머니라고 하지 않은가... 기억안나면 복습하면되지뭐 Property Wrapper 직독직해 해보면 속성 래퍼 라고 하는데 이게 뭘하느냐는 잠시뒤에 말해드리고 SwiftUI를 사용해보신분들이라면 @State , @Binding같은 것들을 많이 보았을텐데 이런것들을 Property Wrapper라고 한다. 이게 뭐냐? 컴파일러에게 이 타입은 특별한거야! 라고 소개를 해줍니다. 그럼 어떻게사용하냐 실제로 ..