![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bKeZbS/btrr05WaQiA/KRKudSgKyL6OcY5T7yXk5k/img.jpg)
안녕하세요! 이번 글의 주제는 Coordinator Pattern이에요! 사실 iOS 관련 주제라고 할 수는 없지만.. 카테고리 선정이 애매해서 iOS에 포함시켰어요 :) 그래서 패턴 자체는 범용적으로 사용할 수 있지만 iOS 상황에서의 Coordinator Pattern에 대해 설명해보려고 해요 ☺️ 왜 사용하는가? 앱 개발 상황을 가정해볼게요. 화면 전환은 매우 자주 일어나는 일인데 일반적으로 각 화면은 독립적인 ViewController를 가지고 있고 ViewController에서 다른 ViewController로 전환될 필요가 있어요. 이때 가장 단순한 방법은 하나의 ViewController의 인스턴스를 직접 생성해주며 화면을 전환시키는 거예요. 예시를 볼게요! // in MainViewCont..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/GJj18/btrrhF9AU90/0W83ZCUkzDQLYbcMjttbk1/img.jpg)
RxTest 활용하기 이번 글에서는 RxSwift로 구현된 기능을 테스트해보기 위해 RxTest를 사용해보려고 해요! RxSwift는 비동기로 동작하기 때문에 단순히 코드를 작업하면 원하지 않는 결과물이 나올 수 있어요. 테스트 시 비동기 상황을 만드는 방법은 여러 가지가 있겠지만, 이번에는 RxTest를 익혀보기로 했어요 :] (거기에 더해 Nimble / RxNimble을 추가로 사용했어요!) 상황 이해하기 우선 테스트하려는 객체를 정의해볼게요. 저는 SearchBar에 글자를 입력하고 검색 버튼을 눌렀을 경우 그 글자가 정상적으로 잘 전달되는지 테스트하려고 해요. 그 코드는 아래와 같아요. import RxCocoa import RxSwift struct SearchBarViewModel { let..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/b1LRjh/btrrdnIgXqR/gSlf4keRTn7SFVm28cseQ0/img.jpg)
init() vs viewDidLoad() in UIViewController 왜 갑자기 이런 의문이 들었을까? UI 라이브러리인 Texture를 학습하며 init과 didLoad에 차이점을 학습한 경험이 있어요. UIKit에서 UIViewController를 구성할 경우 init은 Main 스레드에서 동작하지만, Texture에서는 init과 didLoad의 차이가 있었어요. 어떤 코드의 경우 init에서 초기화를 하는지, didLoad에서 초기화를 하는지에 따라 큰 차이를 낼 수 있었어요. 예를 들면, UI 같은 경우 갱신을 Main 스레드에서 진행하기 때문에 굳이 init에서 선언하기보다 didLoad에서 선언하는 것이 좋았죠. 그래서 작업할 때 초기화 위치에 대한 고민을 많이 했던 것 같아요. 그..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/neu8n/btrpJQZDuVv/txBWqxfu4Rp0SBlXYCetYK/img.jpg)
문제 상황 파악하기 UI를 구현할 때 가장 힘든 것 중 하나가 매번 빌드하면서 결과물을 확인하는 것이죠. 물론, Figma 등으로 UI 스펙이 확정된 경우 UI를 그리기 상대적으로 편하지만 그래도 여전히 UI 확인을 실시간으로 할 수 없다는 건 불편한 것 같아요. 특히 현업에서 빌드를 한 번 돌리는데 너무 많은 시간이 소요되었기 때문에 더 힘들었어요(단순 빌드가 20분 넘게 걸린 적도..). 그래서 이번에는 Preview를 통해 화면을 미리 볼 수 있는 기능을 구현해볼게요. Preview 구현하기 우선 도구는 SwiftUI에요. "내 프로젝트는 UIKit인데?" 하는 분이 있을 수도 있지만 프로젝트의 UI와 아무 상관이 없어요. 저 역시 프로젝트는 UIKit와 Snapkit으로 구현하고, SwiftUI는..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bD4sPr/btrpzK0ByGK/DVOK1lKGfaSm2MQaerUcx1/img.jpg)
문제 상황 이해하기 API를 통해서 문자열을 호출할 때 HTML 태그와 함께 오는 경우들이 있어요. 예를 들면, Kakao API에서 카페 검색 정보를 호출할 때 결과물 중 제목과 콘텐츠에 HTML 태그들이 섞여와요. 아래는 Kakao 개발 가이드에서 보여주는 Response의 예시에요. HTTP/1.1 200 OK Content-Type: application/json;charset=UTF-8 { "meta": { "is_end": false, "pageable_count": 983, "total_count": 218662 }, "documents": [ { "cafename": "쭉빵카페", "contents": "무대의상들 정보 궁금해하는 게녀들이 있길래 가져왔어! 이번에는 레드벨벳이랑 아이유 의상..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/dav1u2/btrpxxs6wjc/I9pNX0YB6V6AOcR8t3kqx0/img.jpg)
문제 상황 이해하기 카카오 API를 활용해서 JSON을 받아오고, iOS에서 decoding 하려고 하는데 문제가 발생했어요. 우선 아래는 Kakao API 개발 가이드에 나오는 내용이에요. datetime의 타입은 Datetime이고, 그 형식은 IOS 8601이에요. 그래서 아래와 같은 코드로 Decoder를 설정한 후 Decoding을 진행했어요. let decoder = JSONDecoder() decoder.dateDecodingStrategy = .iso8601 분명히 dateDecodingStrategy가 iso8601이기 때문에 문제가 없어 보였어요. ISO 8601은 일종의 규격이기 때문에 통일되어 있을 거라고 판단했어요. 그런데 원하는 결과물이 나오지 않았고, 어디에서 문제가 발생했는지..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/kITit/btrpqyTAaWZ/LqmCzb5zK3a1PkWK2kqxB1/img.jpg)
커스텀 UIColor 만들기 프로젝트를 진행하면서 default가 아닌 색을 반복적으로 사용할 일이 있었어요. 다음 카페 앱을 만드는데 다음 카페 색깔을 시스템 컬러처럼 등록해서 사용하고 싶었어요. 그 과정을 로깅해볼게요! :] 참고: iOS version - 15.0 적용한 예시 PR RGB 값 추출하기 우선 다음 카페로 들어가서 원하는 색깔이 있는 이미지를 찾았어요. 아래 그림에서 cafe의 글자 색을 가져오고 싶었어요. F12로 CSS를 봐야 하나 했는데 맥에는 훨씬 간편한 툴이 이미 있었어요! 디지털 컬러 측정기라는 맥 기본 앱이에요. 앱을 틀어서 원하는 곳에 커서를 대면 그 RGB 값이 추출돼요. 이제 필요한 RGB 값은 알게 되었어요! Color Asset 만들기 우선 프로젝트의 Assets...
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bknkBr/btriFjociGd/PXmQ2QCro0F4nK82865Nzk/img.jpg)
🎯 RxSwift 이해하기_05 RxSwift 이해하기_01 - https://jayb-log.tistory.com/275 RxSwift 이해하기_02 - https://jayb-log.tistory.com/276 RxSwift 이해하기_03 - https://jayb-log.tistory.com/277 RxSwift 이해하기_04 - https://jayb-log.tistory.com/278 🙋 이 글은 RxSwift에 대한 엄청난 이해나 본질을 파악한다기보다 입문하는 입장에서 작성하는 글이에요! 곰튀김님의 강의(하단에 링크) 를 들으며 정리한 내용, 생각들을 작성할 예정이에요. 틀린 부분이나 추가하면 좋은 부분에 대한 피드백은 언제나 환영입니다 :] 이 글에서는 Main Thread, Concurre..
- Total
- Today
- Yesterday
- filter#isalnum#lower
- 종이자르기#분할정복#BOJ#Python
- Swift#Tuples#Range
- 날짜 계산#BOJ#완전탐색#Python
- 미로 탐색#백준알고리즘#Python
- 나무자르기#BOJ#이분탐색#Python
- Distinct#Codility#Python
- 순열사이클#BOJ#Python
- 랜선자르기#이분탐색#BOJ#Python
- PassingCars#Codility#Python
- django#slicing
- django
- API#lazy#
- Triangle#Sorting#Codility#Python
- 공유기 설치#BOJ#이분탐색#Python
- 리모컨#완전탐색#BOJ#Python
- 배열합치기#분할정복#BOJ#Python
- 텀 프로젝트#백준알고리즘#Python
- 터틀비치#리콘#xbox#controller
- 암호코드#dp#BOJ#Python
- N으로 표현#DP#Programmers#Python
- NumberofDiscIntersections#Codility#Sort#Python
- 쿼드트리#BOJ#분할정복#Python
- Brackets#Stacks and Queues#Codility#Python
- 병든 나이트#BOJ#탐욕법#Python
- 섬의개수#백준알고리즘#Python
- 백준 알고리즘#BackTracking
- 파이썬알고리즘인터뷰#4장
- 토마토#백준알고리즘#Python
- 반복수열#백준알고리즘#Python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |