WWDC 2022 > Embrace Swift Generics 에 나오는 내용입니다. Feed (사료, 먹이) 를 associatedtype으로 가지는 Animal 프로토콜을 예제로 사용합니다. [1] AS IS Farm에 feed라는 메소드를 만들고 싶을 때, 아래 두가지 중 하나의 방법으로 코드를 작성해줬어야했습니다. 메소드가 좀 복잡해보입니다. [2] TO BE 하지만!! 이제 opaque type인 some을 사용하여, 아래와 같이 간단한 메소드를 만들 수 있습니다. Swift 5.7부터는 some을 parameter type에도 쓸 수 있기 때문입니다 👏 (이전에는 프로퍼티 타입, 리턴 타입에만 쓸 수 있었음) [3] some 과 any (1) 하지만,, some은 제약이 있는데,, 아래와 같이..
[1] RELEASE 플래그 보통 앱을 만들면 DEBUG 컴파일러 플래그는 기본으로 추가되어있고 RELEASE 플래그를 직접 추가합니다. 그리고 앱에서 종종 플래그를 사용해서 분기처리를 합니다. class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() #if RELEASE print("릴리즈") #else print("릴리즈 아님") #endif #if DEBUG ... } } 그럼 Local Swift Package 를 앱에 embed 해서 쓰는 경우, Swift Package 안에서도 앱 빌드세팅의 컴파일러 플래그를 그대로 사용할 수 있을까요? 테스트해보면 #if DEBUG 는 타고 #if REL..
UITableViewDiffableDataSource의 4가지 apply 메서드 글에서 진행한 간단한 예제를 계속 활용해서 헷갈리는 부분을 테스트해보겠습니다. [1] 아이템이나 인덱스 찾을 때, datasource API를 써야할까 vs snapshot API를 써야할까? UITableViewDiffableDataSource 는 아래와 같은 API가 있고 NSDiffableDataSouceSnapshot은 아래와 같은 API가 있습니다. 각각을 활용해서 할 수 있는 것들을 나열해보겠습니다. (iOS 13 기준!!) 어떤 것을 쓰던 상관없지만,, ✔️ Section이 여러개 있는 화면이라면 snapshot API // multiple sections 관련해서 다양한 기능을 제공하니까 ✔️ 제가 작성한 예제..
Diffable Data Source in iOS 15 에서 다룬 내용인데, 헷갈리니까 한번 더 정리! [1] UITableViewDiffableDataSource의 4가지 apply 메서드들 UITableViewDiffableDataSource 에는 Updating Data를 위한 4개의 apply 메서드들이 있습니다. 위에서부터 적어보면 다음과 같습니다. - apply(_:animatingDifferences:) // iOS 15+ - apply(_:animatingDifferences:completion:) // iOS 13+ - applySnapshotUsingReloadData(_:) // iOS 15+ - applySnapshotUsingReloadData(_:completion:) // iO..
[1] 용어정리 text selection 하면 나오는 등장하는 메뉴 팝업 UI를 HIG 에서는 Edit Menus 라고 지칭하고 개발 용어로는 UIMenuController 입니다. 그리고 Edit Menu (UIMenuContoller) 안에 나오는 Cut, Copy.. 이런 것들을 Command, Action, MenuItem 이라는 용어로 혼용해서 부릅니다. [2] UIMenuController 커스터마이징 (1) - System 첫번째로, UIMenuController 에 나오는 system commands 중 원하는 command 만 나오게 커스터마이징 하려면 어떻게 해야할까요? UIMenuController가 표시되기 전에 UIResponder 의 canPerformAction(_:withS..
[1] 용어정리 (출처: 이펙티브 코틀린) 애플 문서(Sequence and Collection)에 'eager' 이라는 단어가 나오는 데 이것을 이해하기 위해 이펙티브 코틀린 책내용을 가져왔습니다! ✔️ eager order (step-by-step) - 요소 전체를 대상으로 연산을 차근차근 적용한다. - 각 단계에서 연산이 이루어져 새로운 컬렉션을 만들어낸다. ✔️ lazy order (element-by-element) - 요소 하나하나에 지정한 연산을 한꺼번에 적용한다. - 최종 연산이 이루어지기 전까지는 각 단계에서 연산이 일어나지 않는다. ==> 사전적 의미로 lazy = 게으른, eager = 열렬한(열심인) 이기 때문에 저 두단어가 같이 쓰이는 것 같아요! [ eager vs lazy ] ..
Swift Docs > Attribute 를 보면, Swift의 inline 관련 attribute 로 inlinable과 usableFromInline 가 있습니다. [1] inline 한정자란? 우선 이펙티브 코틀린 책 내용을 통해 inline 개념을 먼저 알아봅시다! inline 한정자의 역할은 컴파일 시점에 '함수를 호출하는 부분'을 '함수의 본문' 으로 대체하는 것입니다. 일반적인 함수를 호출하면 함수 분문으로 점프하고, 본문의 모든 문장을 호출한 뒤에 함수를 호출했던 위치로 다시 점프하는 과정을 거칩니다. 하지만 inline 한정자를 붙여 함수를 만드면, 이러한 점프가 일어나지 않습니다. # 장점 모든 함수는 inline 한정자를 붙이면 조금 더 빠르게 동작합니다. 함수 호출과 리턴을 위해 점..
RxSwift 는 5가지 방법으로 이 라이브러리를 사용할 수 있다고 가이드하고 있습니다. 1. Cocoapod 2. Carthage 3. SPM 4. xcframework 5. git submodule [1] 제공하는 쪽 써드파티 라이브러리를 제공하는 입장에서 각각을 지원할 수 있는 가이드에 대한 링크를 정리해둡니다. (저는 Cocoapod과 SPM은 예전에 해봐서 카르타고, xcframework 를 한번 해봐야겠어요) 1. Cocoapod 지원하기 https://guides.cocoapods.org/making/making-a-cocoapod.html [ static vs dynamic ] 사용하는 쪽에서 podfile에 use_frameworks! 을 안써주느냐 써주느냐 로 static 또는 dyna..
[1] Overriding Build Settings for a Target 타겟이 프로젝트 빌드세팅을 상속받는데, 타겟의 특정 값을 직접 수정하면 오버라이딩하는 셈이 되어 해당 타겟만 설정을 따로 가져갈 수 있다. 즉 프로젝트의 특정 값을 수정해도 타겟의 값은 따라서 안바뀌게 되는 것이다. 그리고 타겟의 빌드세팅에서 오버라이딩한 필드는 볼드체로 표시되는 것 같ㄷ (Xcode 13.2 사용 중) 나의 설명보다.. Working with Targets 의 Overriding Build Settings for a Target 부분을 보면 훨씬 명확하다. A target inherits the project’s build settings. Although most developers seldom need to..
Swift Docs > Advanced Operators > Operator Methods, Custom Operators 내용을 기반으로 하고 있습니다. [1] Operator Methods Class와 Structure은 existing operators 에 대해 그들 자신의 구현을 제공할 수 있습니다. 이것은 'existing operators 를 overloading 한다' 라고 말할 수 있습니다. existing operators 목록은 Operator Declarations 문서에서 볼 수 있습니다. 하지만 모든 operator을 overload 할 수 있는 것은 아닙니다. 1️⃣ default assignment operator (=) 2️⃣ ternary conditional operato..
- Total
- Today
- Yesterday
- Dart Factory
- drf custom error
- Flutter Text Gradient
- DRF APIException
- 플러터 싱글톤
- Flutter Clipboard
- 플러터 얼럿
- flutter 앱 출시
- flutter deep link
- cocoapod
- Python Type Hint
- flutter build mode
- SerializerMethodField
- flutter dynamic link
- Flutter 로딩
- 구글 Geocoding API
- PencilKit
- Watch App for iOS App vs Watch App
- ipad multitasking
- github actions
- ribs
- METAL
- Django Heroku Scheduler
- Flutter Spacer
- Flutter getter setter
- 장고 URL querystring
- Django Firebase Cloud Messaging
- Django FCM
- 장고 Custom Management Command
- Sketch 누끼
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |