일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 리펙토링
- swift documentation
- Observable
- uiscrollview
- 애니메이션
- ios
- UICollectionView
- Refactoring
- HIG
- MVVM
- combine
- swiftUI
- Xcode
- map
- uitableview
- 클린 코드
- rxswift
- 스위프트
- Human interface guide
- SWIFT
- Clean Code
- tableView
- ribs
- clean architecture
- RxCocoa
- 리팩토링
- collectionview
- 리펙터링
- Protocol
- UITextView
- Today
- Total
목록2022/03 (31)
김종권의 iOS 앱 개발 알아가기
xUnique 충돌 문제 대응 Xcode는 프로젝트 정보를 .xcodeproj 파일을 통해 관리하는데, 이 파일 에서는 파일을 새로 생성할 때마다 UUID가 달라지고, 파일들이 정렬되지 않아 충돌 문제가 존재 xUnique는 동일한 파일에 같은 UUID를 할당하고 이름을 기준으로 정렬하는 방식을 사용 xUnique은 python으로 설치해야 하므로 python 설치 home brew 설치 파이썬 DI 관리 도구인 poetry 설치 python의 pip는 .lock파일이 없어서 버전관리가 번거롭지만, poetry는 lock파일이 존재하여 버전 관리에 용이 (DI 관리) // intel brew install poetry // apple silicon chip arch -arm64 brew install p..
@unknown이란? enum타입을 접근하는 switch-case문에서 사용되는 키워드 추가적인 case가 생겼을 때, 기존에 switch-case문에서 해당 case를 선언하지 않고 @unknown default로 선언해 놓으면 사용하는 쪽에서 warning 메시지를 받아볼 수 있어 인지할 수 있게끔 하는 키워드 예시) switch문에서 case에 대한 모든 조건을 선언하면 컴파일 에러와 워닝이 발생하지 않고 정상적인 케이스 enum Color { case blue(name: String, alpha: CGFloat) case green(name: String, alpha: CGFloat) } let color = Color.blue(name: "blue", alpha: 0.5) switch color..
OperationQueue를 사용하여 Noti 구현 NotificationView를 OperationQueue를 사용하여 보여지게 만들면, NotificationView 관련 작업을 cancel, suspend 할 수 있어서, 하나의 작업 단위로 Wrapping할 수 있는 장점이 존재 NotificationView를 사용하는 입장에서는 단순히 NotificationView를 띄우는 행위를 `하나의 기능`이라고 보고 NotificationView를 몰라도 NotificationService.show()하여 노티뷰를 띄우는 기능을 사용하도록 하기 위함 NotificationService 기능 protocol NotificationService { func show(title: String, delay: UI..
화면전환 애니메이션 커스텀 아이디어 VC1 -> VC2로 화면전환 하는 경우, VC2 인스턴스의 화면전환 델리게이트를 conform하여 애니메이션을 넣어주는 것 delegate 부분 // ViewController.swift (=VC1) @objc private func didTapNextButton() { let vc2 = VC2() vc2.transitioningDelegate = self // UIViewControllerAnimatedTransitioning? { MyPresentTransition() } func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning?..
UITableViewCell, UICollectionViewCell에서의 highlighted 애니메이션 가장 쉽게 접근하기위해서 Cell에서 highlighted가 트리거 될 때, cell 속성에 배경색이나 이미지를 바꾸는 등을 할 수 있지만 cell은 UIButton과 다르게 highlighted의 값이 true, false가 빠르게 바뀌어, 적용이 안되는 것처럼 보이는 문제가 존재 아래처럼 셀을 탭할 때 highlighted 애니메이션이 안들어간것처럼 보이는 현상 존재 (길게 누르고 있어야 highlighted 확인 가능) // in MyTableViewCell override func setHighlighted(_ highlighted: Bool, animated: Bool) { super.set..
UITableView에서 셀 간 간격 설정 방법 * CustomCell에서 layoutSubviews를 이용하여 설정 방법은 해당 포스팅 글 참고 가장 단순한 방법은 UICollectionView를 사용하여 UITableView처럼 사용 아래에서 볼 것이지만, UITableView는 contentInset 설정도 버그가 있으므로 UICollectionView 사용을 지향 UICollectionView와 UICollectionViewFlowLayout를 사용 let layout = UICollectionViewFlowLayout() layout.minimumLineSpacing = 8.0 // CGSize { .init(width: collectionView.bounds.width - 60, height:..
* 해시의 기본 개념은 이전 포스팅 글 Hashable, 해시 참고 Hashable 사용 방법 일반적으로 Hashable프로토콜을 따르면 스위프트의 기본 타입(String, Int, ...)등은 이미 적용 var nameSet = Set() self.nameSet.insert("jake") self.nameSet.insert("jake") print(self.nameSet) // ["jake"] struct, enum, class와 같은 것들은 따로 hashValue를 정의해주지 않으면 해싱이 적용되지 않는 것을 주의 ex) id가 같으면 같은 사람으로 보고 싶지만, 아래처럼 age가 다르므로 set에 id가 같은 인스턴스가 중복으로 들어가는 케이스가 존재 struct Person: Hashable { ..
* 스위즐링 관련 설명이 더욱 추가된 최신 포스팅 글은 이 포스팅 글 참고 사전 지식) Objective-c에서 메소드가 실행되는 과정 Objective-C는 동적인 언어(dynamic language) 동적인 언어: 어떤 코드가 실행될지 런타임에 결정 (실행되는 순간가지 코드의 실행을 미룰 수 있다는 의미) 정적인 언어: 어떤 코드가 실행될지 컴파일/링크 시점에 결정 Objective-C는 런타임에 메세지를 날리고, 그 메세지를 통해 메소드를 찾아서 실행 message 생성 - [receive message] 컴파일러에 의해 컨버젼 - objc_msgSend(receiver, selector, arg1, arg2, ...) // ex) objective-c 메소드이므로, 런타임 때 코드 실행이 결정 @..