일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 애니메이션
- 리펙터링
- MVVM
- 리펙토링
- 스위프트
- Observable
- Clean Code
- RxCocoa
- rxswift
- UITextView
- combine
- SWIFT
- Protocol
- Human interface guide
- Refactoring
- collectionview
- ribs
- swift documentation
- uitableview
- uiscrollview
- UICollectionView
- swiftUI
- map
- ios
- clean architecture
- tableView
- Xcode
- 클린 코드
- HIG
- 리팩토링
- Today
- Total
목록ios (1095)
김종권의 iOS 앱 개발 알아가기
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dcBre9/btrgYlmBbXh/tyVwAZlfBC6DveZB2iJ7n0/img.png)
Subject 기본 개념 Observable과 Observer의 성격을 모두 가지고 있는 프로토콜 Observable의 성격: subscribe을 하여 이벤트를 수신할 수 있는 상태 Observer의 성격: subscribe한 대상들을 내부에서 기록하고 있는 상태 (= subscribe한 대상들을 알고 있기 때문에, 여러번 Observable에 이벤트를 emit이 가능) (= multi case) // 프레임워크 없이 직접 구현한 MySubject.swift public final class MySubject { struct Observer { weak var observer: AnyObject? let block: (Value) -> Void } private var observers = [Observ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cXIrLu/btrgMyVBmXu/0Kuk0NvEXWUQuNVqDXSYg1/img.png)
필수 개념, Data 형 메모리 안의 바이트가 저장될 수 있는 `바이트 버퍼` `바이트 버퍼`: 운영체제의 커널이 관리하는 시스템 메모리를 직접 사용할 수 있기 때문에 데이터의 저장, 로드가 가능 swift는 URLSession으로 dataTask를 만들어, 네트워크 호출을 하면 응답으로 Data형을 받는데, 이는 저장, 로드, 변환이 쉽기 때문에 Data로 받는 것 자주 사용되는 것은 json데이터를 struct형으로 변경하거나, 반대로 struct형에서 json으로 변경할 때 먼저 `Data`형으로 변경한 다음 원하는 데이터형으로 변경하여 사용 ex) UserDefaults에 struct 자료형을 Encoder, Decoder를 이용하여 저장하는 방법: https://ios-development.ti..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/SWYfY/btrgumVCWov/sBMIkk2QaWwzL4AqUjiNm0/img.png)
1. 이미지 캐싱, 이미지 효율적으로 로드 방법, 스크롤에 따라 이미지 로드(tableView, collectionView): scrollViewDidScroll, prefetch 2. 이미지 캐싱, 이미지 효율적으로 로드 방법(tableView, collectionView): async + NSCache cf) 애플 공식 문서에서 나온 ImageCache 방법은 여기 참고 처리 방법 2단계 scrollViewDidScroll, prefetch 방법으로 모든 페이지의 이미지를 한꺼번에 호출하지 않고 스크롤에 따라 page를 늘려나가며 API호출 > 이미지 url들을 획득 이미지 url들만 우선 cell의 모델에 적용 ImageCache를 통해서 url들에 대해서 이미지 로드 > cell의 item 모델 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b5TRia/btrgAJJ3uIJ/E9IFZqoMljx8CQqL2ptf2k/img.gif)
1. 이미지 캐싱, 이미지 효율적으로 로드 방법, 스크롤에 따라 이미지 로드(tableView, collectionView): scrollViewDidScroll, prefetch 2. 이미지 캐싱, 이미지 효율적으로 로드 방법(tableView, collectionView): async + NSCache 아이디어 스크롤이 느려지고, 앱이 꺼지고 이미지들이 사용자에게 보여질 때 느려질 수 있으므로 캐시를 사용 비동기적으로 이미지를 저장하고 cache를 사용 어떻게? request(page:1) API 호출 > 10개의 이미지 url 획득 10개의 이미지 url만 cell의 model에 먼저 저장 (image는 따로 호출하여 반영) image는 최초 10개만 일단 로드하고, 나머지는 아래에서 나오는 내용인..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/PQJcg/btrgFT5GQw6/xmZ6tkDeAFz6o1kZpFDC41/img.gif)
1. Diffable Data Source - UITableViewDiffableDataSource (테이블 뷰) 2. Diffable Data Source - UICollectionViewDiffableDataSource (컬렉션 뷰) UICollectionViewDiffableDataSource TableView에서의 Diffable Data Source와 같은 원리로 iOS 13+부터 사용가능 개념은 TableView에서의 Diffable Data Source를 참고하고, 아래에서는 예제 코드로 확인 UICollectionViewCompositionalLayout UICollectionViewLayout의 서브클래스이며 compositinoal하게 레이아웃을 쉽게 적용하기 위해서 등장 개념 - co..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/c0w2fv/btrgAM7OKM3/wZxUbM4yMOc1K26bWEilP0/img.png)
* URLSession 기본 개념은 여기 참고 준비 구현된 해당 소스 코드 사용 시, 아래 작업 사용 후 실행 https://unsplash.com/developers 가입 후 api키 획득 Contants에 accessKey입력 struct Constants { static let accessKey = "Your accessKey" } Network 레이어 설계 네트워크의 핵심 모듈 Endpoint: path, queryPramameters, bodyParameter등의 데이터 객체 Provider: URLSession, DataTask를 이용하여 network호출이 이루어 지는 곳 Endpoint는 요청, 응답 protocol을 준수하는 상태 requestable에는 baseURL, path, met..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Xhu8j/btrgdG0NO5p/9lS9PYfzKVZfTrcC1aZEak/img.gif)
Horizontal Scroll View 단순히 인터렉션이 없고 보여주기만 한다면 해당 Horizontal Scroll View 사용해도 무방하지만, Interaction이 필요한 경우 해당 클릭된 셀이 어떤 셀 이벤트인지 확인할 수 있는 ViewPager 글 참고 구현 아이디어 imageView를 scrollView에 추가할 때 xOffset값을 horizontalWidth값에 비례하여 삽입 후, scrollView의 contentSize.width값을 horizontalWidth * imageViews.count만큼 설정하면 완료 구현 BaseScrollView 정의 class BaseScrollView: UIScrollView { var model: Model? { didSet { if let mo..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bpMvEr/btrfWK2NLeD/BEoKqyLlVjd5rRKkfW9sD1/img.png)
0. 코드로 알아보는 SOLID - 클래스 다이어그램 필수 표현 1. 코드로 알아보는 SOLID - SRP(Single Responsibility Principle) 단일 책임 원칙 2. 코드로 알아보는 SOLID - OCP(Open Close Principle) 개방 폐쇄 원칙 3. 코드로 알아보는 SOLID - LSP(Liskov Substitution Principle) 리스코프 치환 원칙 4. 코드로 알아보는 SOLID - ISP(Interface Segregation Principle) 인터페이스 분리 원칙 5. 코드로 알아보는 SOLID - DIP(Dependency Inversion Principle, testable) 의존성 역전 원칙 6. 코드로 알아보는 SOLID - Coordinato..