일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |
- MainScheduler.asyncInstance
- cleanarchitecture
- SwiftUI
- MainScheduler
- 명품cppProgramming c++
- 오픈채팅방
- 프로그래머스
- IOS
- RaceCondition
- CoreBluetooth
- GCD
- data_structure
- DependencyInjection
- SRP
- combine
- GIT
- 청년취업사관학교
- swift
- DispatchQueue
- 코테
- Realm
- MainScheduler.Instance
- MethodSwilzzling
- SeSAC
- gitflow
- 등굣길
- leetcode
- DiffableDataSource
- DynamicMemberLookup
- rxswift
- Today
- Total
목록iOS (44)
Do.
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..
문제 SwiftUI는 withAnimation으로 간단하게 애니메이션을 할 수 있는데, 종종 사라질 때 이 애니메이션이 작용하지 않는 듯한 모습을 보입니다. Tap을 하면 Circle은 자연스럽게 opacity Transition이 동작하는데, 글자는 나타날 때는 애니메이션이 잘 되는거 같은데, 사라질 때는 애니메이션이 동작하지 않는 것 처럼 뿅하고 사라집니다. 더보기 struct ContentView: View { @State var state: Bool = false var body: some View { VStack { Button { withAnimation { state.toggle() } } label: { Text("Tap \(state ? "On" : "Off")") } ZStack { C..
소개 Cache(캐시)는 컴퓨팅에서 데이터를 일시적으로 저장하는 것을 뜻한다. 어플리케이션에서 캐시는 요긴하게 쓰이는데, 예를 들어 네트워크 요청을 할 때, 한 번 요청한 결과에 대해서 캐시를 해두고, 다음에 해당 요청을 한번 더 할 때 네트워크 요청을 하지 않고 캐시에서 결과를 가져 올 수 있다. 정리하자면 아래와 같은 장점이 있다. 클라이언트에서는 요청 결과를 훨씬 더 빨리 화면에 보여줄 수 있다. 서버에서는 동일한 요청에 대해 동작을 중복 수행하지 않아도 된다. URLCache iOS에서 네트워크 요청을 하기 위해서는 URLSession이라는 API를 사용하는데, URLSession의 Task에는 대표적으로 몇가지 종류가 있다. DataTask DownloadTask Steam이나, Socket, ..
Combine을 사용할 때, debounce와 같은 오퍼레이터를 사용하면 scheduler를 지정해 주어야 한다. (그 외에도 scheduler를 지정해주는 상황) 이때 지정해 줄 수 있는 것은 RunLoop.main 과 DispatchQueue.main 인데 이 둘은 무슨 차이일까? query.debounce(for: .milliseconds(800), scheduler: RunLoop.main) query.debounce(for: .milliseconds(800), scheduler: DispatchQueue.main) 직접 실행해 보면 얼핏 차이가 없는 것처럼 보이지만 실제로는 중요한 차이가 있다. RunLoop.main 를 스케줄러로 사용하면 사용자의 터치 반응 등의 이벤트가 전달되지 않는다. 따..
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 주변 장치의 특정 기능 또는 특징을..
하드웨어 환경 해결방법 Xcode 로제타로 실행하세요 🤬 소개 NMapsMap을 사용해야 하는데, 해당 프레임워크는 cocoapods 설치밖에 지원하지 않습니다. 거기다 잘~ 설치하고나서 보니, SPM으로 설치된 것들이 빌드 오류가 발생습니다.
(safari에서는 gif를 이미지를 불러올 수 없습니다. 곰탱이로 보여집니다. chrome로 봐요) Intro DiffableDataSource는 wwdc2019에서 Advances in UI Data Sources라는 이름으로 발표된 API입니다. DiffableDataSource는 기존 DataSource를 구성하는 새로운 방법으로, 복잡한 코드를 간편하고 빠르게 작성할 수 있게 해줍니다. CollectionView와 TableView에서 애니메이션 효과는 꼭 필요한 유저 경험을 제공합니다. 출현배경 CollectionView, TableView 모두 동시에 적용 되므로, CollectionView로 앞으로는 통일하겠습니다. 간단한 CollectionView 써보셨다면, 사실 크게 복잡하지 않은 앱..