앱등이에게 살충제를 뿌린다./Swift
-
[Swift] addObserver를 한 뒤 remove를 해주어야 하는가?앱등이에게 살충제를 뿌린다./Swift 2022. 9. 18. 02:46
https://developer.apple.com/documentation/foundation/notificationcenter/1413994-removeobserver 위 문서에 따르면 iOS9.0 이후에는 observer를 unregister하지 않아도 된다고 한다. If your app targets iOS 9.0 and later or macOS 10.11 and later, and you used [addObserver(_:selector:name:object:)], you do not need to unregister the observer. If you forget or are unable to remove the observer, the system cleans up the next tim..
-
WWDC2020 - Unsafe Swift앱등이에게 살충제를 뿌린다./Swift 2021. 5. 14. 18:41
Unsafe Swift Swift에서 제공하는 많은 타입, 프로토콜, 프로퍼티등 그 중 Unsafe라는 접두어를 가진 것들이 있다. 무엇이 다른 것일까? 수행하는 기능, 인터페이스에서 큰 차이점을 가지지는 않는다. Invalid Input을 처리하는 과정에서 차이점을 가진다. 대부분의 Operator가 Input을 완전히 Validation한다. (Swift가 Safe한 Programming Language인 이유) 그래서 우리는 쉽게 에러를 리포트받고 수정할 수 있다. Example Optional을 예로 들어보자. let value: Int? = nil print(value!) // Fatal error: Unexpectedly found nil while unwrapping an Optional v..
-
[RxSwift] Rx Observer들의 기본 스케쥴러앱등이에게 살충제를 뿌린다./Swift 2020. 9. 11. 17:15
ControlProperty는 항상 MainScheduler // ControlProperty.swift **The implementation of `ControlProperty` will ensure that sequence of values is being subscribed on main scheduler (`subscribeOn(ConcurrentMainScheduler.instance)` behavior).** Driver는 거의 MainScheduler // Driver.swift If `drive*`, `subscribe*` and `bind*` are called from background thread, it is possible that initial replay will happen ..
-
[RxSwift/RxCocoa] RxCocoa에서 TableView사용하는 코드를 쪼개서 이해해보자.앱등이에게 살충제를 뿌린다./Swift 2020. 3. 15. 20:48
RxCocoa-TableView사용을 위해 구글링을 해보면 아래와 같은 예제소스가 가득하다. // let items = Observable.just([ "First Item", "Second Item", "Third Item" ]) items .bind(to: tableView.rx.items) { (tableView, row, element) in let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")! cell.textLabel?.text = "\(element) @ row \(row)" return cell }.disposed(by: disposeBag) 코드를 좀 이해해보기 위해서UITableView+Rx.swift를 들어가보면 item..
-
[RxSwift/RxCocoa] Subject는 알겠는데, Relay는 뭐지?앱등이에게 살충제를 뿌린다./Swift 2020. 3. 14. 18:34
오 마이갓..Ray Wenderlich의 RxSwift를 2번이나 완독하고 프로젝트에 투입되었는데.. 아는 것보다 모르는 게 더 많다😭Ray Wenderlich에서는 RxCocoa에 대해서는 별로 다루지 않았기 때문이다. ------------------------------------------------------------------------------------------------ 일단 PublishRelay, BehaviorRelay에 대해서 살펴보자. /// BehaviorRelay is a wrapper for `BehaviorSubject`. /// /// Unlike `BehaviorSubject` it can't terminate with error or completed. publ..
-
Swiftlint를 통해서 프로젝트에서 느낌표(!)를 제거해보자앱등이에게 살충제를 뿌린다./Swift 2019. 12. 19. 20:04
간혹 발생하는 크래쉬의 원인. Implicitly unwrapped optional 값이 셋팅 된 뒤로 nil이 될 가능성이 없는 optional이라고 간주되어 !를 붙여주지만,크래쉬로 뒤통수를 친다. 그러면 swiftlint를 통해서 이 느낌표를 제거해보자. .swiftlint.yml파일에서 아래 항목을 추가해주자. opt_in_rules: - implicitly_unwrapped_optional 그러면 우리가 선언한 모든 느낌표에 warning이 발생한다. 하지만 스토리보드에 연결된 @IBOutlet 프로퍼티에는 warning이 발생하지 않는다.얘네들까지 전부 warning을 발생시켜 수정하려면 아래와 같이 lint 옵션을 수정해주면 된다. implicitly_unwrapped_optional: mo..
-
[GCD] DispatchQueue.. main큐와 gloabal큐? sync와 asnyc? 궁금증 해결해보자.앱등이에게 살충제를 뿌린다./Swift 2018. 9. 4. 16:22
많은 언어에서 제공하는 비동기 처리 방식.Swift(또는 objc)에는 GCD가 있다. iOS개발을 하다보면, 아래 코드를 많이 보고, 또 사용할 수 밖에 없다.DispatchQueue.main.async {//...} 구글에 GCD를 쳐보면 무수히 많은 정리문서가 존재한다. (심지어 한글로 포스팅한 글도 엄청 많음)그래서 난 나만의 정리를..위해서 포스트를 작성한다. 아래 코드의 결과를 정확히 예측할 수 있다면, 학습이 되었다고 판단하겠다. UIViewController의 viewDidLoad()에서 작성한 코드니까, 아래 코드는 메인스레드에서 작동한다는 전제가 있다. override func viewDidLoad() { super.viewDidLoad() DispatchQueue.global().sy..