일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- combine
- Clean Code
- 리팩토링
- UITextView
- 클린 코드
- Human interface guide
- tableView
- Xcode
- ribs
- Refactoring
- ios
- swift documentation
- rxswift
- HIG
- uiscrollview
- MVVM
- Protocol
- 스위프트
- map
- 리펙터링
- SWIFT
- 애니메이션
- 리펙토링
- uitableview
- collectionview
- RxCocoa
- swiftUI
- Observable
- clean architecture
- UICollectionView
- Today
- Total
목록2022/11 (30)
김종권의 iOS 앱 개발 알아가기
1. Higher order function (고차함수) 직접 구현 방법 - map, filter, reduce 2. Higher order function (고차함수) 직접 구현 방법 - flatMap, compactMap Map, Filter, Reduce map, filter, reduce는 higher order function (고차함수) higher order function이란? 다음 두 가지 중 하나에 해당 하나 이상의 함수를 인자로 받는 것 함수를 결과로 리턴하는것 Map 주어진 Element 하나하나씩 접근하여 클로저로 넘겨준 함수 (higher order function)에 맵핑하여 새로운 타입을 반환 [1,2,3].map { print($0) } 구현 방법 extension Arra..
1. Swift Concurrency 개념 - async, await, Task, async let, Actor 2. Swift Concurrency 개념 - async, await를 이용하여 api 호출해보기 async, await 란? iOS13+ 사용 가능 비동기 처리를 위해서 completion closure를 사용하지 않고 async, await 키워드를 사용하여 더욱 가독성 있는 비동기 프로그래밍이 가능한 것 * 구체적인 async, await 내용은 이전 포스팅 글 async, await 사용 방법 참고 async 키워드) 함수 정의 부분, throws 앞에 사용 func fetchItems() async { } func fetchSomeItems() async throws -> String..
UIView와 CALayer 차이 * CA: Core Animation CALayer는 UIKit보다 한 단계 낮은 수준의 인터페이스를 제공하여, UIKit보다 많은 기능을 제공하지만 몇 가지 기능에 대해서 직접 구현 필요 OpenGL은 GPU에서 2D, 3D 그래픽을 렌더링하는데 사용되는 저수준 API로 iOS Graphic Hardware(Core Graphic)에 해당 UIView는 CALayer의 wrapper 역할 Core Animation는 저수준 api이고, UIKit은 고수준 api CA의 특성 Core Animation은 별도의 쓰레드에서 GPU를 사용해 UI를 직접 렌더링 UIView와 달리 Responder가 없어, 유저 인터렉션 기능은 직접 구현 및 설정 필요 Core Animati..
구현 아이디어 상단에는 UIImageView, 하단에는 스크롤되는 UITableView나 UICollectionView 준비 (예제에서는 UICollectionView 사용) UIImageView와 UICollectionView 레이아웃 UICollectionView의 topAnchor를 화면의 최상단으로 제약 UICollectionView의 top contentInset값을 UIImageView의 크기만큼 설정 - UIImageView가 마치 collectionView의 하나의 셀처럼 보이도록 하기 위함 상단의 UIImageView도 마치 스크롤 되는 동작처럼 보여야하므로, scrollViewDidScroll(_:) 델리게이트에서, scrollView.contentOffset.y값을 이용하여 UIIma..
SelfSizing 아이디어 SelfSizing이란? Cell의 크기에 따라 일종의 Container인 TableView와 CollectionView의 크기도 동적으로 커지게 만드는 것 구현 아이디어 layoutSubviews()에서 invalidateIntrinsicContentSize() 호출 intrinsicContentSize를 재정의하여 콘텐츠의 크기만큼 해당 뷰가 늘어나게끔 구현 사용하는쪽에서는 UIStackView로 위에서 정의한 tableView, collectionView를 넣어서 사용 UIStackView는 내부 뷰의 intrinsicContentSize에 따라 달라지므로, SelfSizing 구현에 적합 여기까지 하면 자동으로 height가 변경되는 tableView, scrollVi..
1. Live Activity (ActivityKit, Dynamic Island, 잠금 화면) - 개념 2. Live Activity (ActivityKit, Dynamic Island, 잠금 화면) - UI 구현 방법 3. Live Activity (ActivityKit, Dynamic Island, 잠금 화면) - UIKit에서 다이나믹 아일랜드 적용 방법 예제를 위한 UIKit 프로젝트 생성 Interface > SwiftUI가 아닌 Storyboard 선택 info.plist에서 Live Activity 활성화 Xcode에서 target 선택 Widget Extension 추가 생성된 것 중 필요한 두 가지 파일 확인 JakeBundle: body가 있으며 여러 위젯을 노출할때 사용되는 컨테이너..
목차) Combine - 목차 링크 Catch(_:) 에러가 발생할때 해당 에러에 대한 catch에 걸리면 catch에서 리턴한 데이터만 방출하고 위에있던 남은 데이터는 무시 struct MyError: Error {} let _ = [1,2,-3,4,5].publisher .tryMap { guard $0 > 0 else { throw MyError() } return $0 } .catch { error in [9,8,7].publisher } .sink( receiveCompletion: { print("Completion: \($0)") }, receiveValue: { print("Value:", $0) } ) // Value: 1 // Value: 2 // Value: 9 // Value: 8 ..
if let 옵셔널 바인딩 개선 '=' 기호를 사용하지 않고 옵셔널 바인딩 가능 // 이전 if let data = data { print(data) } // swift 5.7 if let date { print(data) } Type Checking 빌드 속도 개선 closure 리턴 키워드 생략 단일 표현식에서만 가능했던 closure에서 리턴 키워드 생략이 여러줄이 있는 클로저에서도 적용 가능 // 이전 let newArr = arr.map { val -> String in let ret = $0 + 2 String(ret) } // Swift5.7 let arr = [1,2,3] let newArr = arr.map { let ret = $0 + 2 String(ret) // swift5.7부터 ..