RayWenderlich
-
Ch1. TDD란 무엇인가?Ray Wenderlich/TDD 2020. 10. 4. 21:53
Why use TDD? TDD는 소프트웨어가 잘 작동하고, 미래에도 계속 잘 작동 할 것을 보장해준다. 코드를 전부 작성한 뒤, 테스트 코드를 작성할 수도 있다. Alternatively, you could skip writing tests altogether and, instead, manually test your code 하지만 TDD가 이런 방법에 비해 갖는 장점은? 는 앱이 기대하는 바와 같이 동작하는 것을 보장한다. 모든 테스트가 는 아니다. 는 failable, repeatable, quick to run and maintainable 해야 한다. TDD는 아래와 같은 방법론을 통해 좋은 테스트 작성을 보장한다. 첫 번째는 failing test를 작성하는 것이다. 말 그대로, 이 과정은 테..
-
RxSwift - TableView, CollectionVIew를 사용해보자Ray Wenderlich/RxSwift 2020. 2. 29. 21:28
Ch.18 Table and CollectionViewsiOS앱에서 가장 많이 사용하는 UI는 UITableView, UICollectionVIew를 통해 데이터의 리스트를 표현하는 것이다. 보통은 delegate, dataSource의 콜백을 통해 데이터를 표현한다. RxSwift를 사용하면 observable sequence를 TableView, CollectionView에 표현할 수 있음을 물론이고, 코드의 양도 줄일 수 있다. UITableView, UICollectionView의 간단한 사용은 RxCocoa에 이미 포함되어 있다. 좀 더 심화적인 내용(섹션관리, 애니메이션 등)은 RxDataSources(https://github.com/RxSwiftCommunity/RxDataSources)를..
-
RxSwift - retryWhen(_:)에 대해서 알아보자Ray Wenderlich/RxSwift 2020. 2. 20. 22:22
Ch14. Error Handling in Practice p.292 - 294RxSwift의 에러처리 방법에 대해서 알아보자. 크게 2가지가 있다.1. Catch하여 처리하기2. Retry하기 (Retry해도 실패하면 Catch하던가) 1은 Swift와 유사하니 끄덕하고 넘어가자.2를 수행하기 위해 RxSwift에서는 retry() 오퍼레이터를 제공한다. retry를 시도하는 3가지의 메소드가 있다.func retry() -> RxSwift.Observable // 1 func retry(_ maxAttemptCount:) -> Observable // 2 func retryWhen(_ notificationHandler:) -> Observable // 3 1, 2번의 경우는 직관적이다. 에러가 발생..
-
RxSwift - amb(_:), switchLatest()에 대해서 알아보자Ray Wenderlich/RxSwift 2020. 2. 10. 22:02
Ch9. Combining operatiors p.191 - p.193RxSwift에는 "Switching" 오퍼레이터라고 불리는 2개의 주요 오퍼레이터가 있다.바로 amb(_:)와 switchLatest()다. 이 오퍼레이터들은 컴바인한 이벤트 또는 여러 시퀀스들 중에서 하나의 시퀀스로 Switch해준다.(원문: They both allow you to produce an observable sequence by switching between the events of the combined or source sequences.)이를 통해 우리는 런타임에 어떤 시퀀스를 사용할 지 결정할 수 있게 된다. amb(_:)amb는 ambiguous의 약자다. let left = PublishSubject()l..
-
[CoreAnimation] Ch13. Shaped and MasksRay Wenderlich/Core Animation 2018. 9. 1. 18:10
13장 Shaped and Masks Intro CAShapeLayer - 다양한 곡선(CGPath)을 그릴 수 있다. 베지어 곡선(UIBezierPath)을 이용하여 cgPath프로퍼티에 넣어주면 곡선을 그릴 수 있다. 그릴 곡선을 정했다면 아래 프로퍼티를 수정하여 데코를 할 수 있음 - path - fillColor - lineDashPhase - lineWidth Finishing up the avatar view Creating the bounce-off animation 두 아바타뷰가 만났다 멀어졌다 하는 애니메이션 구현 (특별할 것 없음) Morphing shapes 두 아바타뷰가 만났을 때 찌그러지는 효과를 내서 더 생동감있게 표현 cgPath를 구하기 위해 UIBezierPath를 사용하면..
-
[CoreAnimation] Ch9. Animation Keys and Delegates (레이어 애니메이션 Delegate, Key를 사용하기)Ray Wenderlich/Core Animation 2018. 8. 1. 20:58
9장 Animation Keys and Delegates Intro UIView animation을 사용할 때, 애니메이션을 중지할 수 없었다. 하지만 Core Animation에선 모든게 가능!layer의 애니메이션은 멈출 수 있다. 더불어 delegate를 설정하여 애니메이션의 시작과 끝(or interrupted)에 대한 핸들링도 가능하다. Introducing animation delegates CAAnimationDelegate에는 두 메소드가 있다. func animationDidStart(_ anim: CAAnimation)func animationDidStop(_ anim: CAAnimation, finished flag: Bool) Key-value coding compliance CAA..
-
[CoreAnimation] Ch8. Getting started with Layer Animations. (레이어 애니메이션)Ray Wenderlich/Core Animation 2018. 7. 31. 22:20
8장 Getting Started with Layer Animations Section 3. Layer AnimationsView vs LayerLayer는 View와 다르다. Layer는 View를 표현하는데 필요한 데이터를 갖는 모델 객체다. Layer는 View와 어떻게 다른가?- 말 그대로 모델 객체! 데이터만 포함한다. 뷰의 로직에는 전혀 관여하지 않는다. 오토레이아웃 의존성이나 사용자 인터렉션에도 물론 관여하지 않는다.- View에 없는 visible trait가 존재한다. borderLine, borderColor, position, shadow 등- GPU는 레이어 정보를 캐싱하여, 화면에 그림을 그린다. Layer, View. 다시 한 번 비교Views- 복잡한 뷰 계층 구조를 갖는다. ..
-
RxSwift - startWith(_:), concat(_:), concatMap(_:)에 대해서 알아보자.Ray Wenderlich/RxSwift 2018. 7. 5. 00:38
Ch9. Combining Operators p.179 - p.183 startWith(_:)Observable시퀀스 앞에 다른 값을 추가해주는 기능을 한다.그림과 코드를 보면 너무나도 간단하다!! (2, 3, 4)라는 시퀀스가 있고, 맨 앞에 1을 추가하고 싶다.이를 해결하기 위해 startWith(1)을 사용해보자.let numbers = Observable.of(2, 3, 4) let observable = numbers.startWith(1)observable.subscribe(onNext: { value in print(value) }) 사족을 다는 것보다, 이것으로 설명을 마치는게 제일 깔끔해보인다. concat(_:)결론부터 말하자면, startWith(_:)와 굉장히 흡사하다.startWi..