일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- tableView
- 리펙토링
- uitableview
- Human interface guide
- ribs
- ios
- UICollectionView
- combine
- 애니메이션
- Observable
- Xcode
- swiftUI
- collectionview
- SWIFT
- 리펙터링
- clean architecture
- rxswift
- 클린 코드
- Refactoring
- UITextView
- uiscrollview
- swift documentation
- 리팩토링
- HIG
- Clean Code
- map
- 스위프트
- Protocol
- MVVM
- RxCocoa
- Today
- Total
목록iOS 기본 (swift) (148)
김종권의 iOS 앱 개발 알아가기
throws 함수 내부에서 오류를 밖으로 던지고, 사용하는 쪽에서 그 오류를 처리할 때 사용하는 키워드 throws키워드는 함수 시그니처의 반환 전 화살표 좌측에 사용 enum MyError: Error { case negativeValue } func plus(one: Int, two: Int) throws -> Int { guard one < 0 && two < 0 else { throw MyError.negativeValue } return one + two } throws 처리 do { let value = try plus(one: -1, two: 2) print(value) } catch { print(error) } rethrows 파라미터로 전달받은 함수가 에러를 던질 때 사용 이름이 ret..
사전 지식) string to date 형변환 방법 DateFormatter 인스턴스를 사용하여 문자열을 어떤 형태의 날짜 형태로 만들것인지 명시 DateFormatter 인스턴스로 string을 date로 변환 let dateString = "2022-04-11T15:25:47.929Z" let dateFormatter = DateFormatter() dateFormatter.locale = .init(identifier: "en_US_POSIX") dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ" if let date = dateFormatter.date(from: dateString) { print(date) // Date 타입 2015-05-15 ..
사전 지식) 스위프트의 스레드 스위프트의 main queue는 serial queue이므로, 한 task가 끝나고 난 후에 다음 task를 실행 만약 main.sync로 실행시키면 이 serial queue에 작업이 끝날 때 까지 그 코드에 머물러 있는 상태 queue가 block되고 queue에 넣은 작업들이 완료될때까지 wait 상태 serial queue이므로 이미 block 상태가 되었기 때문에 deadlock 발생 thread safe하게 사용하려면, background thread에서 main.async를 사용하여 순서에 맞게 UI업데이트가 되도록 구현 크게 main(serial)과 global(concurrent)가 존재 async와 concurrent의 차이 async, sync 단일 작업..
1. AVFoundation 개념 - 구조, AVAsset, AVKit 2. AVFoundation 개념 - AVPlayer, AVPlayerItem 3. AVFoundation 개념 - AVPlayer 오디오 재생, 일시정지, 재생구간 이동 구현 (play, pause, seek) 4. AVFoundation 개념 - AVPlayer, AVPlayerLayer로 동영상 재생 방법 5. AVFoundation 개념 - AVAudioSession 개념 (오디오 활성화, 입출력 변경, 잠금화면 재생, 재생 중 전화가 온 경우 처리) * 번외) 오디오 처리 - AVPlayer, AVAudioPlayer 개념 (실시간 스트리밍, 로컬 파일 재생) AVAudioSession AVAudioSession라는 싱글톤이..
1. AVFoundation 개념 - 구조, AVAsset, AVKit 2. AVFoundation 개념 - AVPlayer, AVPlayerItem 3. AVFoundation 개념 - AVPlayer 오디오 재생, 일시정지, 재생구간 이동 구현 (play, pause, seek) 4. AVFoundation 개념 - AVPlayer, AVPlayerLayer로 동영상 재생 방법 5. AVFoundation 개념 - AVAudioSession 개념 (오디오 활성화, 입출력 변경, 잠금화면 재생, 재생 중 전화가 온 경우 처리) AVPlayerLayer CALayer의 서브클래스이고, 동영상을 재생시킬 수 있는 layer 보통 AVPlayerLayer의 인스턴스를 AVPlayer를 생성자로하여 만든 후,..
트랜잭션의 의미 트랜잭션: 원자성, 일관성, 독립성, 지속성을 갖춘 Operation 원자성(atomic): 부분적으로 실행되다가 중단되지 않는 것을 보장하는 능력 ex) A사람이 B사람에게 돈을 보내는 작업을 한 경우, A사람은 돈이 빠져나갔지만 B사람한테 돈이 전달되지 않은 경우, 원자성 위배 일관성(Consistency): n번 Operation을 했을 때 기대하는 값이 모두 일관적으로 동일해야함 독립성(Isolation): Operation 수행 시 다른 작업이 끼어들지 못하게 하는 것 지속성(Durability): 성공적으로 수행된 Operation은 영원히 반영 애플의 CATransaction 트랜잭션에서 atomic (부분적으로 실행되다가 중단되지 않는 것을 보장) 특성을 따르며, layer..
Xcode에서 Release 스킴 추가하기 scheme 버튼 클릭 New Scheme 클릭 ExCheme-Release 입력 후 OK 클릭 생성된 것 확인 -> Edit Scheme 클릭 Release 스킴인지 확인 후, Build Configuration을 Release로 변경 추후에, Project의 Configuration을 설정하는 곳은 Project -> Configurations에서 인증서나 .config 파일 관리 configuration을 사용하여 phase 관리하는 방법은 이전 포스팅 글, 배포 환경 설정 참고 Phase 별 빌드 세팅 custom flag 설정 (매크로 상수) Target -> Build Settings -> swift compiler - Custom Flags ex) ..
* 레이아웃 구현에 편의를 위해 예제에서 사용한 프레임워크 SnapKit UIScrollView 간단 구현 UIScrollView 하나를 두고, 안에 내용들이 들어갈 UIStackView를 준비 내용이 표시될 label, button 준비 // ViewController.swift private lazy var scrollView: UIScrollView = { let view = UIScrollView() return view }() private lazy var stackView: UIStackView = { let view = UIStackView() view.axis = .vertical view.spacing = 8 return view }() private lazy var label: UILa..