일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 리팩토링
- rxswift
- Human interface guide
- uitableview
- combine
- Protocol
- Observable
- tableView
- map
- MVVM
- 클린 코드
- clean architecture
- collectionview
- 리펙터링
- uiscrollview
- UICollectionView
- HIG
- Xcode
- Clean Code
- 스위프트
- SWIFT
- RxCocoa
- UITextView
- swiftUI
- ribs
- 애니메이션
- Refactoring
- swift documentation
- 리펙토링
- ios
- Today
- Total
목록스위프트 (16)
김종권의 iOS 앱 개발 알아가기
제스처 동시 인식 활성화 방법 아래처럼 swipeGesturedㅘ panGesture 제스쳐를 view에 추가하면, 디폴트 동작은 추후에 추가한 panGesture만 동작 class ViewController: UIViewController, UIGestureRecognizerDelegate { override func viewDidLoad() { super.viewDidLoad() let swipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipe(_:))) swipeGestureRecognizer.direction = .up view.addGestureRecognizer(swipeGestureR..
Critical Section(크리티컬 섹션) 한 번에 둘 이상의 스레드가 접근하면 안되는 공유 자원 영역 ex) 멀티 스레드로 처리하는 Data가 있을 때 set이 동시에 이루어지면 안되므로 이 구역을 Critical Section이라고 명칭 NSLock, NSRecursiveLock 개념 NSLock 하나의 스레드 혹은 둘 이상의 스레드가 lock()이 있는 다음 코드 부분을 접근하지 못하도록 상호배제하는 방법 critical section에 들어갈때 lock()을 걸고 작업을 끝내면 unlock() 호출하는 방법 NSRecursiveLock 둘 이상의 스레드가 lock()이 있는 다음 코드 부분을 접근하지 못하도록 상호배제하는 방법 NSLock과 NSRecursiveLock 차이 NSRecursiv..
1. Sticky Header 구현 - 스크롤 시 상단 해더 숨기는 방법 2. Sticky Header 구현 - 스크롤 시 상단에 뷰 붙이는 방법 Sticky Header 개념: 스크롤 뷰 상단에 마치 붙어있다가 아래로 스크롤하면 뷰가 떼어진다고 하여 Sticky Header라고 명칭 구현 아이디어 UIScrollView가 가장 하위에 있고, 그 위에 StickyHeaderView가 존재 UIScrollView의 델리게이트 메소드 중 scrollViewDidScroll(_ scrollView: UIScrollView)를 사용하여 스크롤 offset에 따라 StickyHeader뷰의 alpha값만 조정하면 구현 완료 Sticky Header 구현 * 코드로 오토레이아웃 정의에 편리한 SnapKit 사용 레..
* 해시의 기본 개념은 이전 포스팅 글 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 메소드이므로, 런타임 때 코드 실행이 결정 @..
* 구현에서 편리한 레이아웃 작성을 위해 사용한 프레임 워크 pod 'SnapKit' 구현 아이디어 AutoLayout을 이용하여 progressBar의 width를 업데이트하면서 progressBar 구현 progress를 업데이트하면 로딩이 매끄럽지 않고 끊겨져 보일 수 있으므로, UIView.animate 사용 구현 ProgressBarView 정의 import UIKit import SnapKit final class ProgressBarView: UIView { } progressBarView 뷰 정의 private let progressBarView: UIView = { let view = UIView() view.backgroundColor = .systemBlue return view }(..
enum에서 RawValue를 커스텀할 수 있는 방법? 만약 rawValue를 가져올 때 side effect 처리를 추가하고 싶은 경우? 아래처럼 rawValue를 '='이나 implicit raw value로 지정되는게 아닌 직접 커스텀하고 싶은 경우? enum Person: String { case jake = "jake" case kim // implicit raw value of "kim" } let person = Person.jake print(person.rawValue) // "jake" RawRepresentable을 사용하여 커스텀 가능 RawRepresentable 이란? swift에서의 enum은 하나 이상의 `associated value`를 갖을 수 있는데, 이 값의 rawVa..
디폴트 Status Bar Content 색상 검은색 흰색으로 변경 + (ViewController.view.backgroundColor = .black 설정) 설정 방법 info.plist에 `View controller-based status bar appearance`를 No로 설정해야 변경 주의: 아래처럼 접근하면 변경되지 않으므로 주의 override var preferredStatusBarStyle: UIStatusBarStyle { return .darkContent }