본문 바로가기

분류 전체보기

(426)
[iOS] iOS 14 SwiftUI Features Introduce 본 포스트에서는 iOS14 SwiftUI의 주요 변경 Feature들을 간단한 예시 코드와 함께 소개합니다. What’s New in SwiftUI 2.0(iOS 14.0) RootView 설정 AppDelegate 혹은 SceneDelegate를 통하지 않고 아래와 같은 방법으로 RootView를 설정하게 되었습니다. @main struct DemoApp: App { var body: some Scene { WindowGroup { ContentView() } } @Main 특성을 적용하여 프로그램 흐름에 대한 최상위 진입점을 나타냅니다. LazyVStack & LazyHStack Apple Developer Documentation Apple Developer Documentatio..
[iOS] iOS 13 SwiftUI Features Introduce 본 포스트에서는 iOS13 SwiftUI의 주요 개념들을 간단한 예시 코드와 함께 소개합니다. SwiftUI 1.0(iOS 13.0) Apple Developer Documentation What is SwiftUI Apple은 2019년 WWDC에서 SwiftUI를 발표했습니다. SwiftUI는 Swift의 성능을 바탕으로 모든 Apple 플랫폼에서 사용자 인터페이스를 구축할 수 있는 혁신적이고 간소화 된 방법입니다. Declarative Syntax SwiftUI의 가장 큰 특징 중 하나는 인터페이스를 구축하는 방식이 선언형으로 진행된다는 점이죠! 그덕에 더욱 직관적으로 코드를 작성하거나 유지보수 할 수 있다는 장점이 있습니다. struct ContentView: View { var..
[iOS] Using AVAudioEngine to Record Audio on iOS Using AVAudioEngine to Record Audio on iOS AVAudioEngine 은 2014년부터 제공된 클래스입니다. 이를 통해 오디오 데이터 처리(프로세싱)에 대한 파이프라인을 구성할수 있게 되었으며 이번 문서에서는 AVAudioEngine 을 이용하여 어떻게 오디오를 녹음하고 압축하고 스트리밍하는지 알아보도록 하겠습니다. AVAudioEngine Basics 오디오 파이프라인은 AVAudioEngine 클래스를 사용하여 빌드하며 AVAudioNode를 엔진에 연결하는 방식으로 구성합니다. 오디오 데이터는 "노드 -> 노드" 방향으로 흐르며 각 노드들에서 담당하는 로직을 수행하며 파이프라인이 진행됩니다. 모든 프로세싱이 끝난 오디오 데이터는 최종적으로 outputNode 에 도착..
[iOS] AVAudioEngine AVAudioEngine AVAudioEngine 객체는 오디오 노드들의 그래프를 관리하며, 오디오 재생을 제어하고, 실시간 렌더링 제약사항들을 수정할 수 있도록 도와줍니다. Declaration class AVAudioEngine: NSObject Overview 오디오 엔진객체는 AVAudioNode 인스턴스들의 그룹으로 이 노드들을 체이닝하여 로직을 수행합니다. 소스 파일을 playerNode로 부터 받아온 이후 mixerNode를 통해 믹싱을 진행한 이후 결과적으로 OutputNode로 빼냅니다. 물론 약간의 제한은 있으나 실시간 런타임동안 해당 오디오 노드들을 연결하거나 연결을 해제하거나 제거할 수 있습니다. 기본적으로 오디오 엔진은 디바이스에 연결되어 있는 오디오를 실시간으로 렌더링합니다. 오..
[iOS] Combine_Async_Programming - Time Manipulation Operators public func example(of description: String, action: () -> Void) { print("\n--- Example of:", description, "---") action() } var subscriptions = Set() Chapter 6: Time Manipulation Operators 반응현 프로그래밍의 핵심은 시간의 흐름에 따른 비동기 이벤트 흐름을 모델링 할 수 있다는 것 입니다. 이러한 측면에서 Combine 프레임워크는 시간을 다룰 수 있는 다양한 Operator를 제공합니다. 이번 챕터에서는 시간을 조작하는 연산자들에 대해 알아보도록 하겠습니다. Shifting Time 가장 기본적인 시간 조작 operator는 publisher의 Event ..
[iOS] Combine_Async_Programming - Combining Operators Chapter 5: Combining Operators 이번 챕터에서는 Combining Operator에 대해 알아볼게요! 이 연산자들을 통해서 publisher가 방출하는 값을 결합하여 사용할수 있습니다. Prepending prepend 연산자는 upstream에서 오는 값 이전에 인자로 전달한 값을 먼저 방출하는 연산자입니다. prepend 는 값 뿐만 아니라 publisher chain 을 붙일수도 있습니다. 다만, 해당 연산자는 publisher 의 Output 과 동일한 타입이어야 합니다. var subscriptions = Set() // [3, 4] 값을 갖는 publisher를 생성합니다. [3, 4] .publisher .prepend(1, 2) // prepend 연산자를 통해 pu..
[iOS] Combine_Async_Programming - Filtering Operations Chapter4: Filtering Operators 앞서 Transforming Operators를 공부하면서 느끼셨겠지만 연산자는 Combine의 publisher로 부터 오는 시퀀스를 가공하는 역할입니다. 이번 챕터에서는 upstream으로 부터 오는 데이터를 필터링 하는 FIltering Operators들에 대해서 알아보도록 할게요. Filtering basics 필터링 연산자 또한 다른 연산자들과 마찬가지로 예제 코드를 보면 설명도 필요없이 바로 이해가 가능할 정도로 매우 직관적이에요! let numbers = (1...10) .publisher numbers .filter { $0.isMultiple(of: 3) } .sink { value in print("(value) is multipl..
[iOS] Combine_Async_Programming - Transforming Operators Transforming Operators Combine 에서 publisher로 부터 오는 값에 대해서 어떠한 연산을 진행하는 메소드들을 Oeprator 라고 부릅니다. 각각의 Combine Operator들은 publisher를 반환합니다. upstream으로 부터 값을 받아오고 -> 값을 가공하고 -> downstream으로 흘려보냅니다. Collectiong Values 앞서 공부했듯 Publisher들은 각각의 값 또는 값의 콜렉션을 방출할수 있습니다. 이 콜렉션을 다루는 연산자들에 대해서 먼저 살펴보도록 할게요. collect() collect 연산자는 publisher로 부터 받은 값들을 배열로 만들어서 반환할수 있도록 합니다. 직접 코드로 예시를 살펴보도록 할게요! var subscripti..