지난 블로깅에 AVAssetWriter로 비디오를 저장하면서 FileManager에 대해 스쳐 지나가듯 나왔었는데요! 이번 블로깅은 FileManager에 깊게 한번 파보려고 합니다 :) 파일 시스템의 내용에 대한 편리한 인터페이스 및 상호 작용의 주요 수단입니다. 그냥 파일을 관리 하는 Class에요! 아이폰을 사용하면서 한번쯤 보셨을 파일 앱에 보통 저장 됩니다. 들어가기전에 용어 정리를 하고 갑시다 Folder = Directory 진행될 플로우는 아래와 같습니다. info.plist 권한 저장할 파일의 경로 설정 (URL), (appendingPathComponent) Directory(폴더) 생성 파일경로 설정 및 생성 & 확장자 설정 파일 삭제 1. Info.plist 권한 아래 두 권한을 모..
회사에서 움직임 감지 기능구현을 하면서 두 가지 기능이 필요했다. 1. 영상 녹화/ 저장 2. 움직임 감지 일단 영상 녹화/저장은 참고해볼 자료가 많아서 리서치 하는데 오래 걸리진 않았지만.. 움직임 감지기능과 영상을 녹화,저장을 동시에 하는 구현을 하면서 겪었던 산전수전을 기록하고자 한다. 삽질시작 빨리 끝낼 수 있는것 부터 손보려고 했고, 영상 녹화/ 저장 으로 가장 많이 나왔던 키워드는 AVCaptureMovieFileOutput, PHPhotoLibrary 였다. 이전 Camera설정 - AVCaptureSession 에서 블로깅했듯, 어렵지 않게 영상 녹화/ 저장 부분을 구현할 수 있었다. 그런 다음 움직임 감지를 하기 위해 제가 여러가지 리서치를 해보며 추려낸 키워드는 AVCaptureVide..
현업에선 RxSwift를 사용하고 있다. 그중 가장 많이 보이는건 .rx 이 친구.. 도대체 뭘까? Button.rx TextField.rx 이런건 봤는데 따로 커스텀해서 만들어져있는걸 보고 공부해야겠다 안되겠다..하고 미루고 미루던게 드디어 오늘이다. 한번 파보자 !! .rx Observable 타입을 표현하는 확장자로, 비동기적으로 데이터를 생성하고나 다른 이벤트를 전달 하는 시퀀스 인데 기본형태로는 아래와 같이 쓰입니다. extension Reactive where Base: SomeType { } 가장 끝 SomeType 쪽에 (UIButton, UITextField, URLSession 등) 감지하고 싶은 특정 reactive extension을 구현합니다. 예시) self.someButton ..
지금까지 Combine 내용에선 무조건 성공하는 케이스만 다뤄봤는데, 이번엔 실패했을경우 에러 처리를 어떻게 해야하는지, 어떤 에러처리 방법이 있는지 다뤄보도록 하겠습니다. Never Failure 타입이 Never인 publisher는 erorr가 없는 경우 입니다. example(of: "Never sink") { Just("Hello") .sink(receiveValue: { print($0) }) .store(in: &subscriptions) } Just의 경우 내부를 보면 Failure = Never인걸 확인할 수 있습니다. 만약 Never 타입에서 동작하는 operator(연산자)는 몇개 더 있습니다. 대표적으로 많이 쓰는 `setFailureType`을 먼저 봅시다. setFailureT..
재직중인 회사 서비스의 주요개발은 카메라와 WebRTC인데, 이번 프로젝트를 통해 카메라 쪽을 구현하면서 공부했던걸 정리해보고자 기록을 남겨봅니다. AVCaptureSession 사진 또는 비디오를 이용하기 전에 아래와 같은 설정을 하는 class 입니다. 즉, input과 output을 연결시켜주는 중개자 의 느낌! 카메라 기능을 구현하려면 아래의 3단계 세팅이 필요합니다. 입력 장치(input device) 출력 미디어(output media) preview views 위 그림을 보고 흐름을 예를 들어 표현해보자면 아래처럼 표현할 수 있어요. * input은 빨간글씨, output은 파란글씨로 적겠습니다. A: 카메라 (후면) 광각 렌즈를 써서 동영상을 찍을건데 소리도 녹화 됐음 좋겠어. 녹화된 영상..
share() 값(value)으로 보다는 참조(reference)로 publisher를 공유할 수 있게 해줍니다. 즉, share() 메서드는 일반적으로 struct로 되어있는 Publisher를 reference타입으로 반환해줌! subscriber는 구독후에 upstream publisher가 방출하는 값을 받게됩니다. subscriber가 upstream publisher가 완료된 공유 publisher를 구독하면, 해당 subscriber는 완료 이벤트(completion event)만 받습니다. import Combine import Foundation let shared = URLSession.shared .dataTaskPublisher(for: URL(string: "https://www...
Key-Value Observing publisher(for:) 단일 변수의 변화를 관찰하려면? KVO(Key-Value Observing)를 준수하는 객체의 모든 속성에 대한 게시자를 제공합니다. ObservableObject 프로토콜은 여러 변수가 변경될 수 있는 경우를 처리합니다. KVO는 Objective-C의 필수 구성 요소였고, Foundation, UIKit 및 AppKit 클래스 대부분의 프로퍼티는 KVO를 준수합니다. 따라서, KVO를 사용하여 변화를 관찰할 수 있습니다. KVO를 준수하는 프로퍼티를 관찰하는 방법 (OperationQueue를 이용) import Combine import Foundation let queue = OperationQueue() let subscriptio..
Timers 타이머를 구현하려면 아래와 같은 방법이 있습니다. RunLoop Timer class DispatchQueue RunLoop NOTE Apple 공식문서에서 RunLoop 클래스는 thread safe 하지 않아, 현재 thread에서만 RunLoop 메서드를 호출해야 한다고 합니다. 아래는 RunLoop를 활용해 1초마다 print를 하는 timer를 만든 예제 입니다. import Foundation let runLoop = RunLoop.main let subscription = runLoop.schedule( after: runLoop.now, interval: .seconds(1), tolerance: .milliseconds(100)) { print("Timer fired") }..
Printing events print(_:to:) 디버깅을 할때 print(_:to:) 메서드로 chain메서드 중간중간 상황을 파악할 수 있습니다. import Combine import Foundation let subscription = (1...3).publisher .print("publisher") .sink { _ in } // 1 //publisher: receive subscription: (1...3) // 2 //publisher: request unlimited // 3 //publisher: receive value: (1) //publisher: receive value: (2) //publisher: receive value: (3) // 4 //publisher: recei..
요즘 Camera 작업을 하면서 Layer와 View가 많이 보여 둘의 차이점이 궁금해졌다. 검색을 해보다가 간단하게 잘 정리 되어있는곳을 참고하여 글을 작성해보려고 한다. UIView, CALayer 무슨차이? Layer는 low-level의 인터페이스를 제공합니다. 즉, UIView에서 조절할 수 없는 부분을 Layer를 통해 할 수 있다는거죠. 아래 그림을 보면 이해가 좀더 잘될 겁니다. UIView View는 더 복잡한 hierarchy (뷰계층)을 갖고 있습니다. 레이아웃을 배치하기 위해 오토레이아웃(AutoLayout)을 사용합니다. UIView 작업은 main Thread에서 발생하며, CPU를 사용합니다. CALayer UIView 보다 hierarchy (뷰계층)가 간단하며, 화면에 그리..
- Total
- Today
- Yesterday
- ios
- Swift final
- swift function
- Swift ModernRIBs
- Class
- Swift init
- Swift 프로그래머스
- CS 네트워크
- 원티드 프리온보딩
- Combine: Asynchronous Programming with Swift
- swift 고차함수
- Swift inout
- Swift Error Handling
- swift protocol
- Swift 프로퍼티
- Swift Leetcode
- Uber Architecture
- Swift joined
- swift reduce
- Swift RIBs
- Swift 내림차순
- swift property
- 2023년 회고
- iOS GCD
- RIBs tutorial
- 호텔리어 개발자
- Swift while
- Swift joined()
- iOS error
- Swift
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |