일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Realm
- DispatchQueue
- SwiftUI
- combine
- leetcode
- MainScheduler.Instance
- MethodSwilzzling
- GIT
- 프로그래머스
- gitflow
- IOS
- GCD
- MainScheduler.asyncInstance
- SeSAC
- CoreBluetooth
- 청년취업사관학교
- MainScheduler
- RaceCondition
- DynamicMemberLookup
- data_structure
- SRP
- rxswift
- 명품cppProgramming c++
- cleanarchitecture
- swift
- DependencyInjection
- DiffableDataSource
- 오픈채팅방
- 등굣길
- 코테
- Today
- Total
목록swift (8)
Do.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/TQ1y0/btsil02MmYu/z3Nsmm1qo4kR6CGrYhTOuk/img.png)
개요 RxSwift를 사용하게 되면 View Layer에서 사용하게 될 때는 꼭 메인 스레드로 변경하도록 코드를 지정해줘야 합니다. 이때 일반적으로 저희가 사용하는 코드는 MainScheduler.instance 와 MainScheduler.asyncInstance 가 있는데, 이 둘은 근본적으로 무슨 차이가 있을까요? 우선 RxSwift 문서에 의하면 다음과 같이 설명하고 있습니다. 요약하자면 메인 큐에 작업 스케줄이 이미 된 코드라면 별도의 스케줄링 없이 바로 동작한다고 적혀있습니다. 무슨 뜻인지 좀더 확실하게 알아볼까요? override func scheduleInternal(_ state: StateType, action: @escaping (StateType) -> Disposable) -> D..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/nfMx8/btrSZAaF2pi/1VZgtNHHXTwpsaMPDtKAek/img.png)
What is Heap 힙은 완전 이진 트리 기반의 자료 구조입니다. 구현 하기 위해서는 트리가 어떤 형태를 가지고 있는 자료 구조인지 미리 알면 좋을 것 같습니다. 힙은 일반적으로 두가지 힙이 있습니다. Max Heap과 Min Heap이 있습니다. 최대 힙은 말 그대로 큰 수가 가장 우선 순위가 높고, 최소 힙은 작은 수가 우선 순위가 높습니다. 우선 순위라는 말을 썼는데요!, Heap 자료 구조는 Priority Queue 자료 구조를 만들 때 활용할 수 있습니다! 힙 자료구조는 어떻게 만들고, 데이터 삽입, 출력은 어떻게 하는지 알아 보도록 하겠습니다. Building Heap은 우선 데이터를 삽입 하고 제거할 때, Tree 형태 자료에 맞게 재배치를 하는 과정이 필요합니다. Max-Heap 기준..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/uMtl1/btrLiBne1bD/CdN0kSxXgO9KOBVZOodia1/img.jpg)
Introduce 회사 업무로 코딩하다 보면 정말 많이 화가날 때가 있는데, 뷰가 너무너무너무 많아서 도대체 내가 지금 보고 있는 뷰의 이름이 뭔지 모를때가 있다. 비슷하게 생긴 뷰도 워낙 많고 하니, 단순히 피그마 디자인만 보고 뷰의 이름이 추측이 안될때가 있다. 기록이나 정의해 둔 문서가 따로 있다면 좋겠지만, 아마 대부분의 회사는 없을 것 같다. 그래서 보통 쓰는 방법이, 뷰 계층 디버거를 이용해서 이름을 알아 내는 방법인데, 이게 또 프로젝트가 너무 커서 그런가, 켜지는 데 시간도 오래 걸리고, 심지어 어떨 때는 계층 디버거가 켜지지도 않는다. 이럴때 진짜 매우 섬뜩하게 화가난다. 코딩할 시간도 부족한데, 뷰 이름이나 찾고 있어야 한다는게... 그래서 어떤 방법을 이용하면 좀더 쉽고 빠르게 찾을 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/FByl6/btrCqnSpWwf/xD5Xr6K4dek7LCdhHQvlY1/img.png)
Intro Swift로 된 라이브러리를 구경하다 보면, Class의 @Attribute로 dynamicMemberLookup이라는 것이 붙은 것을 본 적이 있다. dynamicMemberLookup이 무엇인지, 어떻게 쓰이는지 알아보자 What is Dynamic member lookup 먼저 이것이 무엇인지만 간략하게 설명하자면 '실제 객체에 존재하지 않는 프로퍼티(멤버 변수)를 Dot Syntex로 접근하는 문법` 으로 몬 쌉소린가 싶습니다. 하지만 이 개념을 알고 난 뒤에는 똑같이 설명하게 되실 겁니다. 우선 당연한 예제를 하나 볼게요 struct Developer { let languages: [String: Int] } var henry = Developer(languages: [ "swift"..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bti2NK/btrCqb4CDi3/NuHhM8Sdepxzk7yZUEjml0/img.png)
Issue 서버에서 A.Request의 요청 결과를 받고 A의 결과에 따라 B.Request를 수행해야 하는 상황 Combine으로는 이를 어떻게 처리를 해야 할까 고민했습니다. A_Request.sink { _ in } receiveValue: { data in //processing B_Request.sink { _ in } receiveValue: { data2 in //processing + data2 processing } } 무식한 방법으로는 위와 같이, A_Request를 받고 내부에서 B_Request를 또 호출하는 방법이지만, 괜찮은 코드는 아닙니다. 코드 자체가 불필요한 뎁스를 가지기도 하고 가독성도 떨어지며, 두 기능을 분리하기가 쉽지 않네요. Solution 소개 드릴 기능은 Com..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/OtMAH/btrxrcHBhm0/IbdaFvGUiBOZfjFuKtRc80/img.png)
https://leetcode.com/problems/merge-two-sorted-lists/ Merge Two Sorted Lists - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 오랜만에 리트코드 - 두개의 `정렬된` 링크드 리스트를 하나의 정렬된 리스트로 만들어 내는 것 - 기본 알고리즘은 아래와 같다. 위와 같이 두개의 링크드 리스트가 있으면 각 리스트를 노드를 가리키는 참조 인스턴스가 있다. Left와 Right의 CurrentNode의 Val중 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bV47r1/btruVLT2m53/ziSZThYHKZuBY7dKPk37X0/img.png)
Issue DiffableDataSource와 Realm을 함께 썼을 때 발생했던 문제와 해결법 DiffableDataSource는 Diff을 위해서 일종의 뷰의 상태를 가지고 있는데, 데이터가 변하면, 이전에 가지고 있던 상태와 비교해서 뷰를 갱신합니다. Storage에서 Object3이 삭제가 되고, snapshot을 재 구성해서 dataSource에 apply를 실행하게 되면, 이전 DataSource Snapshot과 비교해서, 화면을 갱신하는 상황입니다. 그런데 해당 과정에서 Realm 예외처리 오류가 발생합니다. RealmManager.shared.deleteTodo(todo: todo) print(dataSource.snapshot().itemIdentifiers(inSection: .Tas..
Bluetooth iOS에서는 BLE(Bluetooth Low Energy) 무선 기술을 CoreBluetooth 프레임워크를 통해 연결 가능하다. Central: Bluetooth 장치에서 데이터를 수신하는 개체 Peripheral: 다른 장치에서 사용할 데이터를 게시할 Bluetooth 장치 Advertising Packets: 블루투스는 Advertising Packets 형태로 가지고 있는 데이터 중 일부를 브로드캐스트 한다. 패킷에는 주변 장치의 이름, 기능 등과 같은 정보가 포함될 수 있다. Central의 역할은 이러한 AdvertisingPackets 을 스캔하고 관련이 있는 주변 장치를 식별하고 개별 장치에 연결하고 추가 정보를 확인한다. Service 주변 장치의 특정 기능 또는 특징을..