일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- RxCocoa
- Protocol
- map
- UICollectionView
- rxswift
- 리펙터링
- 클린 코드
- collectionview
- tableView
- 리팩토링
- 리펙토링
- clean architecture
- swiftUI
- SWIFT
- swift documentation
- UITextView
- Human interface guide
- 애니메이션
- uiscrollview
- Xcode
- MVVM
- Refactoring
- Observable
- Clean Code
- combine
- HIG
- uitableview
- ribs
- 스위프트
- ios
- Today
- Total
목록swiftUI (160)
김종권의 iOS 앱 개발 알아가기
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/TWvd0/btrLKK5snnF/gqx8vVs560JTXARtLlpG3k/img.gif)
네비게이션 바 검색 창 검색 창 구현 방법 List에 띄울 뷰와 데이터 모델 준비 struct SomeView: View { var name: String var body: some View { Text(name) } } struct SomeData: Identifiable { var name: String var id: String { self.name } } ContentView에 필요한 프로퍼티 준비 searchQueryString: 검색창에서 값을 입력할 때 입력될 프로퍼티 datas: 리스트에 표출할 데이터 filteredDatas: 검색 결과 필터링된 데이터 * 대소문자 상관 없이 검색하기 위해서 string.contains()가 아닌, string.localizedStandardContai..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/baD80N/btrLE9jtsmd/kIcWciKE4Rkfz0rb0LBY90/img.gif)
UIVeiwControllerRepresentable UIKit의 ViewController 타입을 SwiftUI의 View 타입으로 변경하여 사용할 수 있는 기능 UIViewControllerRepresentable 프로토콜을 준수하는 구조체를 만들어서 사용 // UIViewControllerRepresentable 프로토콜 public protocol UIViewControllerRepresentable : View where Self.Body == Never { associatedtype UIViewControllerType : UIViewController func makeUIViewController(context: Self.Context) -> Self.UIViewControllerType f..
목차) Combine - 목차 링크 Map 값 요소들을 하나씩 맵핑 (값에 변화를 주는 연산자) let publisher1 = [1, 2, 3].publisher let cancellable1 = publisher1 .map { $0 + 2 } .sink(receiveValue: { print($0) }) /* 3 4 5 */ tryMap map 클로저 내부에서 예외가 던져질 수 있는 연산이 있을때 사용 예외 처리하는 곳은 sink의 receiveCompletion에서 수행 enum SomeError: Error { case zero } let publisher2 = [2, 1, 0].publisher let cancellable2 = publisher2 .tryMap { guard $0 != 0 els..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dUXdld/btrLhXKQfKZ/OATOKrQNHAo3OUrJrQWuK1/img.png)
목차) Combine - 목차 링크 Scheduler 언제, 어떻게 클로저가 실행될지 정하는 프로토콜 thread 설정도 가능 (main, global) 시간 설정도 가능 Scheduler 사용 방법 스레드 변경 receive(on:): downstream의 스레드 변경 subscribe(on:): upstream의 스레드 변경 receive(on:), subscribe(on:) 안쓴 경우 스레드 확인 DispatchQueue.global()로 실행한 경우, main thread가 아닌 global thread에서 sink의 클로저 부분이 동작 즉, 따로 스케줄러 설정을 하지 않으면 subject의 이벤트를 발행하는 쪽의 스케줄러와 동일하기 sink 클로저 부분이 동작 let subject = Pass..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/c7z1c5/btrLhKdLEzN/fPeB3PHWpskmhAH3ZYCHxk/img.png)
목차) Combine - 목차 링크 Subject Publisher의 일종이고 (Publisher 프로토콜을 준수하고 있는 형태), 이 인스턴스는 이벤트를 방출할 수 있는 send(subscription:) 기능이 존재 애플에서는 이벤트 방출을 "inject"라고 명명 @available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) public protocol Subject : AnyObject, Publisher { func send(subscription: Subscription) } PassthoughSubject downstream subscribers에게 값을 broadcast하는 subject 값을 저장하고 있지는 않고 단순히 값을 토스 해주는 역할..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/xHsGX/btrLgOmfIF1/qLeyL3CvwhZn8EuX4HUDI1/img.png)
목차) Combine - 목차 링크 Susbscriber protocol이며 이 프로토콜을 준수하는 subscriber 인스턴스를 만들면, 이 subscriber로 다른 publisher를 구독하여 사용 구독했을때 처리가 이 Subscriber 구현체에서 처리 @available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) public protocol Subscriber : CustomCombineIdentifierConvertible { associatedtype Input associatedtype Failure : Error func receive(subscription: Subscription) func receive(_ input: Self.Input..
목차) Combine - 목차 링크 Just 에러 타입은 항상 Never인 가장 단순한 형태의 Publisher Just(1) .sink { print("Just: \($0)") } // Just: 1 Just((1,2,3)) .sink { print("Just: \($0)") } // Just: (1, 2, 3) Just([1,2,3]) .sink { print("Just: \($0)") } // Just: [1, 2, 3] Sequence 주어진 Sequence를 방출하는 Publisher Publishers.Sequence(sequence: [1,2,3]) .sink( receiveCompletion: { print("receiveCompletion: \($0)") }, receiveValue: {..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/O63gR/btrK57gUIRz/ltASej7jjSaALVKKgr5tKK/img.png)
목차) Combine - 목차 링크 Publisher Publisher는 단순히 이벤트 스트림에서 이벤트를 방출 시킬 수 있는 타입 extension으로 map, tryMap 등 다양한 연산자를 사용할 수 있어서 이벤트 스트림의 핵심 프로토콜 @available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) public enum Publishers { } AnyPublisher Publisher 를 준수하고 있는 struct이며, Publisher를 wrapping하고 있는 가장 추상화된 Publisher @available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) @frozen public struct AnyPu..