일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- uiscrollview
- RxCocoa
- map
- Human interface guide
- Protocol
- uitableview
- UICollectionView
- 리펙토링
- Observable
- UITextView
- Refactoring
- SWIFT
- ribs
- 리펙터링
- HIG
- collectionview
- tableView
- Xcode
- combine
- clean architecture
- 클린 코드
- rxswift
- 스위프트
- Clean Code
- 리팩토링
- 애니메이션
- swiftUI
- ios
- swift documentation
- MVVM
- Today
- Total
목록ios (1096)
김종권의 iOS 앱 개발 알아가기

1. Observable로 Wrapping하여 권한 요청) 위치 권한 요청, 실시간 위치 정보 획득 2. Observable로 Wrapping하여 권한 요청) 사진 권한, 카메라 권한 3. Observable로 Wrapping하여 권한 요청) 마이크 권한, ATT(App Tracking Transparency) 권한 4. Observable로 Wrapping하여 권한 요청) RxSwift의 concat을 이용하여 순서대로 권한 요청 방법 Observable로 wrapping 작업 핵심 기존에 Observable 형태를 리턴해주는 작업이면, RxSwift의 생성자 연산자 중에 deferred 연산자 사용하여 wrapping (해당 글) 기존에 Observable 형태가 아니고 클로저 형태로 값을 받는 경우..

GCD대신 NSOperation 사용하는 경우 (= GCD에서 구현하기 어려운 기능) 작업 중 cancel 기능이 필요한 경우 작업 시작전에 특별한 다른 작업이 먼저 실행되게끔 하고 싶은 경우 작업들의 실행에 우선순위를 주어서 실행 순서를 정하고 싶은 경우 Operation을 서브클래싱하여 작업을 cancel, start하는 것과 같이 작업에 대한 상태를 관리하고 싶은 경우 NSOperation NSOperation은 직접 사용할 수 없는 추상 클래스이므로 NSOperation 서브 클래스로 사용 addDependency(op:)메소드를 통해, 어떤 작업 전 다른 것이 먼저 실행됨을 보장할 때 사용 가능 queue의 실행 우선 순위를 정할 수 있는 장점 public enum NSOperationQueue..

ResultBuilder Swift 5.4에 도입 return 부분의 옵션을 설정하여 return 키워드를 없이 사용할수 있거나, 콤마를 사용하지 않고 배열을 만들 수 있는 등의 기능 사용 가능 ex) 여러 표현식을 단일 값으로 결합하여 결과를 빌드하는 경우 resultBuilder를 사용하지 않은 경우 - 콤마 존재 o resultBuilder를 사용한 경우 - 콤마 존재 x func getPersonMock() -> [Person] { [ Person(name: "jake", age: 20), Person(name: "kim", age: 22), Person(name: "paul", age: 32) ] } @PersonBuilder func getPerson() -> [Person] { Person(..

리펙토링이랑? 겉으로 드러나는 코드의 기능은 바꾸지 않으면서 내부 구조를 개선하는 방식 코드를 작성하고 난 뒤에 설계를 개선하는 일 보통 소프트웨어 개발 시 설계 후 코드를 작성하지만, 시간이 흐르면서 설계에 맞춘 구조는 점차 뒤죽박죽이 되어가므로 리펙토링이 필요 리펙토링이란 기존 흐름과 반대의 작업: 엉망이 되어가는 코드 또는 엉망인 설계를 가져다가 체계적으로 설계된 코드로 탈바꿈이 가능 처음부터 완벽한 설계를 갖추기보다 개발을 진행하면서 지속적으로 설계하는 일이며 시스템을 구축하는 과정에서 더 나은 설계가 무엇인지 배우는 것(= 우수한 설계를 유지하게 되는 효과) 리펙토링 예시 연극의 장르, 관객수 데이터를 받아서 계산하여 영수증을 출력하는 프로그램 데이터 모델 Customer: 연극 의뢰자 Cont..

Cauli 프레임워크 네트워크 디버깅 용도로 사용하는 프레임워크 URLSession을 사용한 모든 Request, Response들을 수집하여 표출 폰을 흔들면 Cauli에서 제공하는 ViewController가 present되어 해당 뷰에서 쉽게 네트워킹 로깅을 확인해볼 수 있는 툴 설정이 매우 간결 (코드 1줄로 사용 가능) 사용 방법 종속성 pod 'Cauliframework' 적용 AppDelegate에서 import didFinishLaunchingWithOptions에서 Cauli 실행 #if DEBUG import Cauliframework #endif ... func application( _ application: UIApplication, didFinishLaunchingWithOp..

* (편의를 위해 SnapKit 사용) 하단 버튼 safe area 대응 방법 notch가 있는 경우와 없는 디바이스 모두 대응 방법 버튼의 layout left, right, bottom 모두 superview와 동일하도록 설정 self.button.snp.makeConstraints { $0.left.right.bottom.equalToSuperview() // TODO: height } 버튼의 크기를 60으로 맞추어야 하는 경우, 버튼의 상단을 safeArea의 하단으로부터 위로 60만큼 올라오도록 설정 self.button.snp.makeConstraints { $0.left.right.bottom.equalToSuperview() $0.top.equalTo(self.view.safeAreaLa..

iOS 에서 사용하는 버전의 개념 Xcode에서 관리하는 버전 CFBundleShortVersionString (marketing_version) - Aoo Store에 게시할 때마다 증가해줘야 하는 버전 major.minor.patch CFBundleVersion (Current_Proejct_Version) - 개발자가 내부적으로 확인하기 위한 용도 (날짜를 사용하기도 함 - 2021.12.29.1 ) 코드에서 접근 - Bundle.main.infoDictinoary로 접근 let marketingVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String let currentProjectVersion = Bundle.m..

Scan 연산자 Scan 연산자: 이전에 방출된 아이템과 새로 방출된 아이템을 결합하여, 새로운 아이템을 생성 새로운 아이템은 그 다음 방출된 아이템의 prev값 Scan 연산자의 핵심은 scan 연산자 내부에 기존 값을 저장하고 새로운 값을 받아서 연산 할 수 있다는 것 scan 연산자 예시1) +, - 카운터 기능 구현 사용할 프레임워크 pod 'RxSwift' pod 'RxCocoa' pod 'SnapKit' UI 준비 - ViewController +, - 버튼을 탭했을 때 카운트를 표출할 UILabel, UIButton 준비 값을 방출하고 구독도 할수 있는 BehaviorRelay 변수 선언 let countRelay = BehaviorRelay(value: 0) 버튼이 탭할때마다 countR..