Swift
-
[UIKit] MVVM(Combine) 과 UITableViewDiffableDataSource 같이 써보기Swift/UIKit 2022. 11. 28. 14:17
Async/Await, MVVM, Combine, TableDiffableDataSource 를 같이 사용해보았다 VC 에서 TableView와 DataSource 를 들고 있고 MVVM 에서 실제 Data 와 FetchRequest 를 요청하는 함수를 실행한다 APIClient 는 실제로 요청을 보낸다 // ViewController enum Section { case main } var tableView: UITableView! var dataSource: UITableViewDiffableDataSource! private let viewModel = ViewModel() private var cancelBag = Set() func configureTableView() { tableView = U..
-
[SwiftUI] 쌓인 NavigationLink 한번에 없애기Swift/SwiftUI 2022. 11. 27. 22:52
import SwiftUI class NavigationModel: ObservableObject { @Published var firstIsActive = false @Published var secondIsActive = false @Published var thirdIsActive = false func returnToView2() { firstIsActive = false } } struct ContentView: View { var body: some View { NavigationView { Root() } .environmentObject(NavigationModel()) } } struct Root: View { @EnvironmentObject var navModel: Navigation..
-
[UIKit] UICollectionViewDiffableDataSource에 대해 알아보자Swift/UIKit 2022. 11. 27. 18:38
What is iOS 13 부터 지원되는 CollectionView 와 TableView 에서 정보를 화면에 뿌려주는 방법중하나이다. 보통 datasource delegate method 를 통해 화면에 뿌려주곤한다. 하지만 델리게이트를 사용하지 않고도 UICollectionViewDiffableDataSource 를 사용하면 보자 자연스럽게 애니메이션을 더해서 화면에 정보를 뿌려줄수 있다. Why delegate method 를 통해 구현된 화면은 보여줘야할 정보가 변경될때 예를 들면 검색창을 통해 입력이 들어와 필터링 해줘야한다면 화면이 바뀌어야하는데 기존에는 reloadData() 를 통해 화면을 새로 그려주었는데 그렇게 되면 화면이 애니메이션없이 뚝뚝 끊기게 된다면 그렇기 때문에 좋지 못한 UX ..
-
[UIKit] frame vs boundsSwift/UIKit 2022. 11. 25. 23:26
func add(childVC: UIViewController, to containerView: UIView) { addChild(childVC) containerView.addSubview(childVC.view) childVC.view.frame = containerView.frame childVC.didMove(toParent: self) } func add(childVC: UIViewController, to containerView: UIView) { addChild(childVC) containerView.addSubview(childVC.view) childVC.view.frame = containerView.bounds childVC.didMove(toParent: self) } frame..
-
[Swift] NSCache 써보기Swift 2022. 11. 22. 20:09
많은 프로젝트들이 img 를 url 로 불러온다 하지만 매번 같은 이미지를 불러오면 얼마나 피곤할까 그래서 캐싱을 한다 1st party 로 캐시해보자 class NetworkManager { static let shared = NetworkManager() private let baseURL = "https://api.github.com/users/" let cache = NSCache() ✅ private init() {} } class ProfileImageView: UIImageView { let cache = NetworkManager.shared.cache ✅ let placeholderImage = UIImage(named: "avatar-placeholder")! override init(..
-
[Swift] GitHub : Rate Limit Exceeded 해결하기Swift 2022. 11. 22. 06:02
프로젝트에서 깃헙에 요청 보내서 유저의 팔로워 정보를 받는 걸 하고 싶다 하지만 1시간에 60번의 요청만 보낼 수 있단다 그래서 토큰을 넣어서 요청을 보내줘야한다 토큰 발급 받는 방법 👇 settings 클릭 Developer settings 클릭 fine-grained tokens 클릭 Followers 에서 read-only 클릭 이후에는 발급 받고 발급 받은 토큰 키값 잘 저장해두자 프로젝트 코드 👇 class NetworkManager { static let shared = NetworkManager() let baseURL = "https://api.github.com/users/" private init() {} func getFollowers(for username: String, page:..
-
[Swift] Enum - Associated Values and Raw ValuesSwift 2022. 11. 21. 13:18
Enumerations — The Swift Programming Language (Swift 5.7) Enumerations An enumeration defines a common type for a group of related values and enables you to work with those values in a type-safe way within your code. If you are familiar with C, you will know that C enumerations assign related names to a set of in docs.swift.org enum 을 쓸때 케이스 마다 다른 타입을 만들수도 있고 모든 케이스가 동일한 타입을 리턴하게 할수도 있다. 케이스 마다 ..