일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- ribs
- uitableview
- swift documentation
- combine
- 리팩토링
- UICollectionView
- UITextView
- collectionview
- 리펙토링
- map
- Human interface guide
- ios
- tableView
- RxCocoa
- 클린 코드
- Protocol
- 스위프트
- Refactoring
- rxswift
- 애니메이션
- swiftUI
- Clean Code
- Observable
- MVVM
- HIG
- uiscrollview
- 리펙터링
- clean architecture
- SWIFT
- Xcode
- Today
- Total
목록2022/12 (32)
김종권의 iOS 앱 개발 알아가기
objc_setAssociatedObject, objc_getAssociatedObject key-value 쌍으로 특정 값을 저장하여 사용 extension에서는 stored property를 지정하지 못하지만, 이 AssociatedObject를 사용하면 stored property처럼 따로 프로퍼티를 추가하고 접근도 가능 AssociatedObject 주요 메소드 객체를 저장하는 메소드 // https://developer.apple.com/documentation/objectivec/1418509-objc_setassociatedobject func objc_setAssociatedObject( _ object: Any, _ key: UnsafeRawPointer, _ value: Any?, _ ..
rbenv ruby 버전 관리를 할 때 사용하는 패키지 rbenv말고도 RVM으로도 ruby를 사용할 수 있지만, RVM이 기능이 많지만 rbenv가 더욱 가벼운 장점이 존재 MacOS를 설치하면 ruby가 내장되어 있지만, ruby 프로그래머가 아닐 경우 해당 ruby를 사용하며 버전 관리하기가 어려운 환경 구체적인 내용) Do not use system Ruby rbenv를 사용하여 ruby 버전 관리 rbenv 설치 파악 % rbenv -v zsh: command not found: rbenv rbenv 설치 (homebrew를 통해 설치) % brew install rbenv ruby-build 현재 설치된 ruby 버전 확인 % ruby -v ruby 2.6.10p210 (2022-04-12 r..
PIP 모드 구현 방법 iOS 14+ Target -> Signing & Capabilities -> Capability -> Background 추가 아래 그림과 같이 Modes > Audio, AirPlay, and Picture in Picture 체크 테스트에 사용될 mp4 url 준비 http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4 테스터에 사용될, HTTP 통신으로 위 mp4를 가져와야 하므로 info.plist에서 ATS추가 후 Allow Arbitrary Loads를 Yes 설정 ViewController에 필요한 AVKit, AVFoundation 임포트 import AVKit import ..
DispatchQueue의 종류 main queue (serial queue) global queue (concurernt, qos 설정 가능) custom queue (디폴트는 serial이며 concurrent로 변경 가능) global queue DispatchQueue.global(qos:) global queue는 모두 concurrent queue임을 주의 qos는 Dispatch.QoS.QoSClass 타입 concurrent 큐이고 qos 설정이 가능 qos(quality of service) // 애니메이션과 같은 UI 즉시 업데이트가 필요하며, 멈춘것처럼 보이지 않는 작업들 (유저의 반응) DispatchQueue.global(qos: .userInteactive) // 저장된 문서를 ..
SwiftLint 사용 방법 Swiftlint는 Cocoapods으로 프로젝트에 추가하지말고 로컬에서 실행해서 사용 SwiftLint는 Cocoapods으로 프로젝트에 추가해서 사용할 수 있지만, 로컬에서 Swiftlint를 실행해도 사용할 수 있으므로 불필요한 cocoapods 디펜던시 주지 않기 위함 brew로 SwiftLint 설치 brew install swiftlint Xcode -> Build Phases -> New Run Script Phase 추가하여 아래 코드 입력 (코드출처) export PATH="$PATH:/opt/homebrew/bin" if which swiftlint >/dev/null; then swiftlint else echo "[warning] SwiftLint not..
1. Swift Concurrency 개념 - async, await, Task, async let, Actor 2. Swift Concurrency 개념 - async, await를 이용하여 api 호출해보기 Async, Await 없는 API 호출 모델 준비 struct AlbumResult: Codable { let results: [Album] } struct Album: Codable, Hashable { let collectionId: Int let collectionName: String let collectionPrice: Double } 구현 enum APIError: Error { case invalidURL case noData } enum API { static func fetchA..
구현 아이디어 수평 스크롤을 위해서 UIScrollView를 이용해도 되지만, 데이터 소스 입력 편의를 위해 UICollectionView 사용 무한 스크롤 원리 (데이터가 1,2,3 이렇게 있을 경우,) 왼쪽에서 오른쪽으로 무한 스크롤: 데이터 세팅: 1, 2, 3, 1 (앞에있는걸 마지막에 붙이기) scrollViewDidEndDecelerating에서 스크롤 된 크기를 알 수 있는 conttentOffset.x를 이용하여 1,2,3,1로 놓고 4번째 1에 도달했을때, 애니메이션 없이 다시 1로 돌아가도록 설정 오른쪽에서 왼쪽으로 무한 스크롤: 마찬가지로 conttentOffset.x를 이용하여 1,2,3,1로 놓고 1번째 1에 도달했을때, 애니메이션 없이 다시 1로 돌아가도록 설정 데이터 세팅: 3..
1. Higher order function (고차함수) 직접 구현 방법 - map, filter, reduce 2. Higher order function (고차함수) 직접 구현 방법 - flatMap, compactMap flatMap, compactMap flatMap, compactMap은 higher order function (고차함수) higher order function이란? 다음 두 가지 중 하나에 해당 하나 이상의 함수를 인자로 받는 것 함수를 결과로 리턴하는것 flatMap 옵셔널바인딩 + nil제거 + 차원 축소 swift4.1부터는 flatMap을 사용할땐 차원 축소 기능만 사용하려고하고, 옵셔널 바인딩과 nil제거는 compcatMap을 사용 권장 [[1,2], [3,4]].f..