[Swift3]Protocol, Extension, AssociatedType 다루기
Swift에서는 프로토콜 지향 프로그래밍을 지원하는 언어로, Protocol에 변수, 함수를 규약합니다. protocol A { var name: String { get set } mutating func set(name: String) } 위의 A라는 프로토콜은...
Swift에서는 프로토콜 지향 프로그래밍을 지원하는 언어로, Protocol에 변수, 함수를 규약합니다. protocol A { var name: String { get set } mutating func set(name: String) } 위의 A라는 프로토콜은...
기존에 팝업 호출, 인증, 알럿 등을 사용할 때 Delegate 또는 Closure를 사용해서 처리합니다. 하지만 이러한 방식은 코드를 읽는데 흐름이 끊어집니다. 예를 들어, 인증 Delegate 메소드를 찾으러 화면을 이동하거나,...
MVVM MVVM 구조가 잘 작성되어 있는 예제가 많이 없다보니 어떻게 구조를 작성해야할 지 시작하기 어렵습니다. 그 와중에 킥스타터에서 자사 앱을 오픈소스로 공개했습니다. 여기에서 제가 주목한 점은 MVVM 아키텍처를...
UITableViewCell에서도 간혹 Rx 방식으로 코드를 작성해야 하는 경우가 종종 있습니다. 하지만 UITableViewCell은 항상 재사용을 하기 때문에 어떻게 사용해야 할지 살짝 난감하기도 합니다. 따라서 재사용하는 특성을 이용하여 DisposeBag을 새로...
Swift를 현업에서 사용하다보면, 고통 받는 시간이 있습니다. 컴파일 시간입니다. Objective-C는 1~2분이면 빌드가 끝나고 시뮬레이터에서 동작하거나 ipa 파일을 뱉어 냅니다. 하지만 제가 진행하고 있는 프로젝트의 초기에는 8분, 그리고 현재...
개발하다 보면 UILabel에 margin을 필요로 하는 상황이 생깁니다. 하지만 UILabel은 text에 따라 크기가 늘어나거나 줄어들고, margin을 줄 수 있는 방법이 없습니다. 그렇다고 상속 받기도 애매합니다. xib 또는 Storyboard에서...
Phantom type(팬텀 타입) Phantom Type은 저장 공간을 가지고 있지 않은 숨겨진 제네릭 매개 변수가 포함된 매개 변수화된 데이터로, 이 용어는 하스켈에서 확인할 수 있습니다. Swift에서는 Phantom Type을 어떻게...
다음은 Swift의 The Swift Array Design를 요약 정리하였습니다. 목표 Swift에서 Array는 다음 목표를 가집니다. C 배열과 같은 성능 Cocoa에 NSArray로 전달시 O(1)이어야 하며, 별도의 메모리 할당이 없어야 함....
Xcode 8로 Swift 자료를 만들다가 연산자 선언 관련해 기존 방법을 사용하지 말고 precedence group을 사용하여 선언하라고 경고 메시지를 보고 Swift 3 제안서를 살펴보았습니다. 그리고 연산자 우선순위 관련한 제안서...
들어가기 전 일반적으로 iOS는 MVC 패턴을 사용하기 때문에 UIViewController가 UITableView를 가지며, UIViewController는 UITableView의 프로토콜인 UITableViewDelegate, UITableViewDataSource를 따릅니다. UITableView 프로토콜을 UIViewController가 따르면 코드의 양이 엄청 불어나기 때문에 가독성이 떨어지게...
Swift 4를 시작했음을 보고 관련된 내용을 살펴보는데 ABI라는 처음보는 단어가 나와 찾아보았습니다. ABI는 Application Binary Interface(응용 프로그램 이진 인터페이스)의 줄임말로 응용 프로그램과 운영체제 또는 응용 프로그램과 라이브러리, 응용프로그램의...
얼마 전 개발 진행하면서 코드로 UI를 개발하던 부분들을 Storyboard로 이전하다가 예상치 못한 부분이 있었습니다. 바로 @IBOutlet 입니다. 아이폰, 아이패드에 대응하여 개발하다가 Storyboard 하나에 모두 넣기엔 너무 방대해져서, 어떤...
요즘에 제대로된 iOS 앱 구조를 작성하고 있어, 그동안 자세히 살펴보지 못했던 것들을 보고 있습니다. 그 중에서 Container View Controller에서 Child View Controller를 추가할 때 왜 addChildViewController를 해야하는지 대충...
프로젝트에서 Objective-C와 Swift를 혼용해서 쓰다 보면, Objective-C 코드의 결과 값을 Swift에서 받아 처리할 때, 모호한 경우가 있습니다. 예를 들어, Objective-C에서 NSMutableArray<Channel *> 값을 반환한다고 할 때 Nullability도 명시하지...
GA를 사용하면서 특정 데이터(예를 들어, 인구 통계와 관심 분야)를 얻기 위해서는 IDFA를 사용해야 합니다. 사용하는 것은 문제가 되지 않으나 앱 리뷰할 때 다음 항목을 체크해야 합니다. 만약 앱...
Swift를 좀 더 Swifty하게 작성할 수 있도록 API Design Guideline을 번역하였습니다. 공식 문서는 여기에서 보실 수 있고, 번역본은 여기에서 보실 수 있습니다. 번역에서 오탈자나 어색한 문장이 있다면 여기로...
얼마전에 개발을 하다 아래에만 바운스 기능이 동작하도록 요구사항을 전달받아서 간단하게 처리해보았습니다. ScrollView의 contentOffset의 y값이 0보다 큰 경우에 bounces를 활성화시켜 아래에서만 바운스가 동작하도록 만들었습니다. func scrollViewDidScroll(scrollView: UIScrollView) { scrollView.bounces...
이전에 다루었던 Subject를 유닛 테스트하려고 합니다. Subject는 Observer와 Observable 두 역할을 수행할 수 있습니다. Subejct는 Observer 역할로서 하나 이상의 Observable을 구독하며, Observable 역할로 아이템을 내보낼 수 있습니다. 다음...
여러 이벤트들이 발생할 때, 제대로 파악하지 못한다면 흐름이 뒤엉켜 내가 원하는 작업을 제대로 수행하지 못합니다. 기존에 작성하던 방식대로 내가 흐름을 제어하면 괜찮지만, Rx에 일임하여 추상적으로 될 수 밖에...
다음은 ReactiveX에서 정의한 Hot and Cold Observables과 RxSwift에서 특정을 정리한 글을 번역한 자료입니다. 핫 옵저버블과 콜드 옵저버블 핫 옵저버블은 만들어지는 즉시 아이템을 발행하기 시작합니다. 그리고 Observable을 구독하는 Observer는...
이 글은 이해가 낮은 상태에서 참고용으로 작성하였습니다. 잘못된 내용이 있을 수 있습니다. RxCocoa를 사용하다보면, Delegate로 사용해야 할 메소드가 확장되어 사용되는 것을 볼 수 있습니다. 예를 들면, UITableView의...
iOS에서 비동기 작업을 가장 많이 하는 것이 네트워크입니다. 네트워크를 한 번만 요청하는 것이 아니라, 요청한 결과를 받아 다시 요청해야 하거나, 동시에 여러 개를 요청하기도 합니다. 비동기 작업의 대표적인...
여러 Observable을 묶어 사용하는 연산자를 살펴보려고 합니다. startWith Obsevable이 아이템을 발행하기 전에 특정 아이템을 먼저 발행합니다. _ = Observable.of(1,2,3) .startWith(4,5,6) .startWith(7) .subscribe { print($0) } // Output Next(7)...
이미지를 전달받았을 때, 배경색이 투명으로 바꿔야할 경우가 있습니다. 여러가지 방법이 있지만, 그 중 두 가지 방법을 쓰려고 합니다. 첫번째는 ImageMagick을 이용한 방법입니다. convert input.png -fuzz 10% -transparent white...
flatMap Rx에서 Observable에서 발행한 아이템을 다른 Observable로 만들며, 만들어진 Observable에서 아이템을 발행합니다. RxSwift에서 제공하는 예제를 살펴보면 좀 더 쉽게 이해할 수 있습니다. let sequenceInt = Observable.of(1, 2, 3)...
Rx를 다루다보면 observeOn과 subscribeOn을 같이 쓸 일이 많은데, 이를 정리하고자 합니다. ObserveOn, SubscribeOn observeOn은 Observable이 아이템을 전파할 때, 사용할 스레드를 지정합니다. subscribeOn은 구독(subscribe)에서 사용할 스레드를 지정합니다. 예를 들어,...