본문 바로가기

Swift 공부

(33)
RxDataSources Multiple Object Multiple Section RxDataSources를 사용하다보면 여러개의 색션 여러타입의 오브젝트를 사용해야할 필요가 있었는데 그때마다 조금씩 햇갈리는게 있어 이번에 정식 RxSwift 예제로 공부를 다시해볼려고한다. static func dataSource() -> RxTableViewSectionedReloadDataSource { return RxTableViewSectionedReloadDataSource( configureCell: { dataSource, table, idxPath, _ in switch dataSource[idxPath] { case let .ImageSectionItem(image, title): let cell: ImageTitleTableViewCell = table.dequeueReusable..
Swift Throw Error Handling 런타임 에러 처리는 앱의 함수들을 만드는 과정중 처리해야할 에러처리 (ex 네트워크 통신 실패 ) 과 같은 사유를 처리해 유저에게 알리거나 로그를 기록하거나 하는 과정들을 처리하고 앱의 비정상적인 종료를 막기 위해 필요하다. 바로 코드를 보면서 설명을하겠습니다. enum ErrorTest : Error{ case BlankError } class ErrorHandling { func 테스트함수(item : String) throws -> String{ if(item == "테스트"){ return "성공" }else{ if(item == ""){ throw ErrorTest.BlankError } return "실패" } } } let errorHandling = ErrorHandling() do { l..
Async / await의 도입 스위프트 5.5 Async/await의 대한 공개가 벌써 꽤 오랜시간이 지났고 Async/await를 통해 클로저의 지옥에서 빠져나올수 있겠구나 생각을 했지만 생각보다 지원타겟이 높기에 아직 실무에 투입하기에는 이르지만 미리미리 준비하는 개발자가 되기 위해 Async/await에 대한 공부를 미리 해볼려고한다. func hellCode(test : String){ TstoryC(test: test) { c in self.TstoryB(test: c) { b in self.TstoryA(test: b) { a in print("a") } } } } func TstoryA(test : String , completionHandler: @escaping(_ a : String) -> ()) { completionHandler..
Swift WMO WMO란 Swift의 컴파일러 기술이고 전체 모듈 최적화의 성능 승리는 프로젝트에 크게 의존하지만 최대 2배 또는 5배까지 가능합니다. 전체 모듈 최적화는 -whole-module-optimization(또는 -wmo) 컴파일러 플래그로 활성화할 수 있으며 Xcode 8에서는 새 프로젝트에 대해 기본적으로 켜져 있습니다. 또한 Swift Package Manager는 릴리스 빌드에서 전체 모듈 최적화로 컴파일이 된다고합니다. 모듈은 Swift 파일의 집합이고 각 모듈은 배포단위로 컴파일이 된다 단일 컴파일에서 Swift 컴파일러는 모듈의 각 파일에 대해 개별적으로 호출이된다. 소스 파일을 읽고 구문 분헉을 한후 컴파일러는 Swift 코드를 최적화 , 코드를 생성 그리고 개체 파일을 생성합니다. 그리고 ..
Tuist 모듈화 공부 Swinject 3편 적용기 Swinject를 공부한지 약 1일차 어제는 오전 코로나로인한 몸살 , 그 후에 잠깐 공부 그리고 T1 GenG 경기를 보니하루가 끝나 오늘부터 본격적으로 Swinject을 공부를 시작했다. Swinject의 가장 중요한 것은 OOP 에서 SOILD 중 D '의존성 주입'(DI : Dependency Injection) 를 도와주는 라이브러리 이고 기존의 내 프로젝트들에서 class ViewModel{ var network : NetworkProtocol init(network : NetworkProtocol){ self.network = network } } 이렇게 처리해줬던 부분들을 도와주는 라이브러라고 이해하면 편할것이다. 기존에 DI를 많이 접해보고 약 2주에 걸쳐 OOP 를 공부했을때 DI의 중..
Tuist 모듈화 공부 Swinject 2편 잡담 Tuist를 공부하던와중 민소네님의 블로그를 보고 모듈화를 결심하게 되었고 모듈화를 공부하다보니 DI관련 라이브러리인 Swinject 알 게 되었고 Swinject에 대해 하나씩 공부하다보니 가볍게 사용하기에는 쉬운데 어떤 관점에서 모듈화를 하고 어떤관점에서 의존성을 주입해줘야하는지를 공부하다보니 생각보다 쉽게 시작이 되지않아 공부중이다 그러던 와중 코로나확진까지... ​Swinject의 정리가 완료되면 업데이트를 진행해볼려고한다. 우선 필요한 순서는 내가 모듈화를 할려는 App의 전체적인 구성도를 그리고 , 거기에 따른 Swinject 사용법 공부 , 관계도구성을 만들어야한다. 대략 이런 형태로 이루어져있고 필요에따라 NetworkServiceProtocol 과 필요한 아이템들을 상속받는 형태로 이루어..
Static Dispatch vs Dynamic Dispatch Static Dispatch , Dynamic Dispatch Static Dispatch 컴파일시 호출될 함수를 결정하기에 성능상 이득 Dynamic Dispatch 런타임에 호출될 함수를 결정하기에 성능상 손해 Class -> Dynamic Dispatch 이유 ovveride 를 통해 함수가 변경 될 수 있기 때문에 Struct -> Static Dispatch 이유 ovveride 를 통해 함수가 변경 될 수 없기에 항상 동일한 함수가 호출 Protocol -> Dynamic Dispatch 이유 해당 프로토콜을 선언을 해주는곳에서 각각 다른 함수로 동작하기에 알 수 없음 자세한 예제들은 아래의 코드를 보면서 하나씩 진행해보면 좋습니다! import Foundation protocol commom..
Tuist , 모듈화 공부 기록기 기존 창업프로젝트 , 회사 프로젝트 모두 1인으로 개발하지만 Mac 회사용 / 개인용 2대를 사용하기 때문에 아주 가끔씩 git에서 Pull 로 프로젝트를 업데이트 하거나 집에서 작업하던것을 merge 할려고하면 xcodeproj, wcworkspace 에서 빌드에 오류가 생기게 되고 그 빌드 오류를 해결하기위해 상당히 귀찮았던 경험들이 많아 좋은 방법이 없을까 찾던도중 XcodeGen을 알게되었고 XcodeGen에 대해 찾다보니 좀더 사용성이 좋은 Tuist알게 되어 Tuist에 대해 공부를 해볼려고한다. 오픈소스로 이뤄져있고 https://github.com/tuist/tuist GitHub - tuist/tuist: 🚀 Create, maintain, and interact with Xcode pr..