☑️ 이 글의 제목 - status bar를 hidden한 뷰컨트롤러를 푸쉬했다가 back 했을때 navigation bar가 shrink 되는 현상 - status bar를 hidden한 뷰컨트롤러를 푸쉬했다가 back 했을때 navigation bar 가 status bar 와 overlap 되는 현상 (두가지를 계속 고민하다가 결국 둘다 너무 길어서 찐제목에는 키워드만 적음,,,) ☑️ 주된 테스트 환경 Xcode 13.4.1 / iOS 15 [1] 준비 아래와 같은 상황으로 준비해줍니다 (feat. 노치없는 시뮬레이터!) - A 는 네비게이션의 root 이다. - A 에서 B 를 푸쉬한다 import UIKit class MyNavigationController: UINavigationContro..
Swift-Collections 패키지(Commonly used data structures for Swift) 에 있는 deque 라는 자료구조를 살펴보겠습니다. deque는 파이썬에서 오래전부터 많이 봐왔던 친구라.. 파이썬 문서랑 Swift 문서를 함께 살펴볼게요! [1] Deque 란 ? - deque는 "double-ended-queue" 의 줄임말입니다. 발음은 "deck" 이라고 합니다. - 양쪽 끝에서 삽입, 삭제가 가능한 큐입니다. (파이썬 문서에서는 'Deques are a generalization of stacks and queues' 라고 말합니다) - array 와 굉장히 비슷합니다. deque와 array 는 모두 ordered, random-access, mutable, ra..
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..
- Total
- Today
- Yesterday
- METAL
- Django FCM
- Dart Factory
- Django Firebase Cloud Messaging
- Sketch 누끼
- ribs
- DRF APIException
- Django Heroku Scheduler
- SerializerMethodField
- cocoapod
- ipad multitasking
- 장고 Custom Management Command
- Watch App for iOS App vs Watch App
- drf custom error
- Flutter Spacer
- flutter build mode
- 플러터 얼럿
- flutter 앱 출시
- Python Type Hint
- flutter dynamic link
- 장고 URL querystring
- PencilKit
- Flutter 로딩
- Flutter getter setter
- Flutter Text Gradient
- 플러터 싱글톤
- 구글 Geocoding API
- github actions
- flutter deep link
- Flutter Clipboard
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |