전체 글
-
Ribs 에 대해서...Swift/아키텍쳐 2021. 9. 30. 15:32
Ribs Uber 에서 만든 아키텍쳐 패턴으로, MVC (Massive ViewController 라고 하는...ㅠ) 패턴에 한계 에서 VIPER 패턴을 바탕으로 만든 패턴입니다. 깃헙 : https://github.com/uber/RIBs 짧게 우버에서 얘기하는 시작의 이유는 아래와 같습니다. 1. 신뢰성 최소한의 장애를 위해 핵심 코드에 대한 엄격한 검토 프로세스, 그 외는 핵심 비즈니스를 중단하지 않는지 확인하고 이러한 코드 분리로 새로운 기능을 시험하고 제대로 작동하는지 테스트한다. 2. iOS와 Android 가 통합된 기반에서 작업할 수 있는 호환성 동일한 패턴으로 더 쉽게 협업하고 동시에 작업할 수 있도록 작업. 아래가 두 플랫폼이 공유하는 내용입니다. Core architecture Cla..
-
Computed Property + Access ControlSwift 2021. 9. 30. 14:22
이전에 DTO, VO 관련 글을 작성하면서, Property 개념과 비슷한 부분이잖아? 했던 Property에 대해서 조금 더 자세히 적어보고자 한다. (https://kkimin.tistory.com/16) 연산 프로퍼티? 무슨말일까요 아주 쉽게 아래의 코드를 말합니다. import Foundation class Test { private var temp: Int = 0 var result: Int { get { return temp } set { temp = newValue + 100 } } } var a = Test() a.result = 12 자 우선, 왜 저렇게 접근할까요? 정답1 : 정말 연산이 필요할때 / 정답2 : 연산 없이 value를 직접 꺼내지 않고 간접적으로 접근하는 측면을 위해 (..
-
Builder - dynamicMemberLookup (+ KeyPath)Swift 2021. 9. 30. 13:22
https://kkimin.tistory.com/78 dynamicMemberLookup (+ KeyPath) Swift 4.2의 변경사항 Dictionary 형태의 값을 subscript(dynamicMember:)를 사용해서 값을 마치 property처럼 사용이 가능하도록 하는것으로 이해했다. 아래의 예제가 도움이 될것이다! (참고는 https://github.c.. kkimin.tistory.com 이 글을 작성하면서 공부한 내용은 Builder Pattern 를 사용하면서 활용할 수 있었다. 해당 방법은 생성자 대신 빌더를 활용해 사용이 쉽고 가독성이 좋은 코드를 얻고 싶을때 사용할 수 있다! 아래 예제 코드를 보면 바로 이해가 될것같다. import Foundation @dynamicMember..
-
dynamicMemberLookup (+ KeyPath)Swift 2021. 9. 23. 17:03
Swift 4.2의 변경사항 Dictionary 형태의 값을 subscript(dynamicMember:)를 사용해서 값을 마치 property처럼 사용이 가능하도록 하는것으로 이해했다. 아래의 예제가 도움이 될것이다! (참고는 https://github.com/apple/swift-evolution/blob/master/proposals/0252-keypath-dynamic-member-lookup.md) @dynamicMemberLookup struct Person { subscript(dynamicMember member: String) -> String { switch member { case "age": return "20" case "name": return "hello" default: re..
-
KxCoding (iOS, Swift 강좌 추천)iOS 2021. 8. 10. 18:05
안녕하세요!!! 오늘은 제가 공부하면서 정말 많은 도움을 받았고, 지금도 SwiftUI, RxSwift를 공부하면서 너무 많은 도움을 받고 있는 KxCoding을 소개해볼까 합니다. KxCoding 먼저 시작하기 전에 감사하다는 말부터 하고 시작하겠습니다 ㅎㅎ 첨에 기초지식, 정말 base가 어떤식으로 구성되어서 진행되는지 메모리는 어떤식으로 관리하는지 등등을 Mastering iOS, Mastering Swift를 통해 배울 수 있었어요. 확실히 예제들위주로 된, 구현 위주로 된 Youtube 강의로도 코드를 작성하고 화면을 만들어 낼 수 있지만, 최적화된 코드 그 이상을 위해서는 꼭 기초가 탄탄해야 한다고 생각합니다! 여기서 그 원리를 알려줬다고 생각해요. 아래는 KxCoding의 강좌 리스트 입니다..
-
NSObject+Rx카테고리 없음 2021. 8. 10. 16:59
pod 'NSObject+Rx' 를 하면 impoert NSObject_Rx // disposeBag을 계속 하면 너무 많죠...? class TestViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() button.rx.tap .disposed(by: rx.disposeBag) // 요렇게 사용하면 된다! } } class MyClass: HasDisposeBag { // NSObject이 아닐때 이렇게도 가능 override func viewDidLoad() { super.viewDidLoad() button.rx.tap .disposed(by: disposeBag) // 요렇게 사용하면 된다! } } ..
-
RxSwift Error HandlingRxSwift 2021. 8. 10. 16:54
보통 에러가 전달되면 그 뒤 next가 전달되지 않음. (구독이 종료되기때문) 그러면 네트워크 에러 -> UI Update (Next Completed) 가 전달되지 않는 문제가 생길 수 있다. 이를 위해서 두가지로 해결 가능하다. 1. catchError 를 통해 새로운 Observable를 리턴하기 2. retry를 통해 Error를 재시도 (무한정/ 갯수 제한) -> Observable catchError Operator // 네트워크 요청을 구현할때 자주 사용 // 올바른 응답을 받지 못했을때 local cache를 사용하거나 등등으로 활용 가능 let bag = DisposeBag() let MyError: Error { case error } let subject = PublisthSubjec..