SwiftUI

SwiftUI | Examining data flow in Scrumdinger

ziziDev 2024. 8. 6. 12:09
반응형

Examining data flow in Scrumdinger

프로젝트에서 두 개의 모델 객체인 ScrumTimer / SpeachRecognizer가 포함되어 있습니다

이 객체들은 Scrumdinger 인터페이스에 표시되는 동적 데이터를 관리하고 있습니다

 

이전 튜토리얼에서 'ScrumTimer'를 이미 다루어 보았는데 다음 튜토리얼에서는 'SpeechRecognizer'의 인스턴스를 생성하고

이 모델 객체들을 탐구하고 SiwftU의 상태 관리 및 생명주기 기능을 사용해서 데이터 흐름을 구현하는 방법을 알아보겠습니다

 

Scrum timer meeting properties

스크럼 타이머 미팅 속성은 'ScrumTimer'데이터에서 상태와 생명주기를 관리하는 튜토리얼에서 미팅 뷰에 스크럼 타이머를 인스턴화 하고 미팅 헤더와 푸터 서브뷰를 생성하였습니다 

이 뷰는 다음과 같은 여러 미팅 속성(활성 발언자, 경과시간, 남은 시간)을 표시하고 있습니다

 

구현을 검토하기 전에 이미 알고 있는 SwiftUI 도구들을 생각해보고 이렇나 도구들을 사용해서 미팅 뷰를 어떻게 구축했는지 고려해야 합니다

미팅 속성들은 자주 업데이트가 되기 때문에 이러한 값들이 변경될 때 마다 동적으로 업데이트되는 뷰를 만들고자 합니다

 

Scrum timer data flow

'ScrumTimer'는 @Published 속성을 사용해서 미팅 속성을 저장하고 타이머를 이용해서 속성들의 값을 자주 업데이트 하고 있습니다

 

미팅뷰는 'scrumTimer'라는 이름의 @StateObject 속성을 선언하고 세 개의 서브뷰는 'scrumTimer'의 속성에 의존하고 있습니다

'scrumTimer'의 데이터가 변경되면 SwiftUI는 최신 데이터를 사용해서 미팅 뷰와 서브뷰들을 다시 그리고 있는것을 알 수 있습니다 

 

서브뷰는 데이터를 읽기만 하고 쓰지 않기 때문에 바인딩을 추가할 필요가 없습니다

데이터는 'scrumTimer'객체에서 시작하여 뷰 계층 구조로 흐르게 됩니다

 

Speech recognizer architecture

음성 인식기는 마이크에 접근해서 오디오를 캡처한 후 음성을 텍스트로 변환합니다

스크럼 타이머와 마찬가지로 음성인식기도 'ObservableObject' 프로토콜을 준수하며 미팅 뷰의 데이터 모델 역할을 하고 있습니다

모바일 장치 지원의 관리자로 뷰가 업데이트 될 때 마다 모델 인스턴스를 반복해서 생성하고 파괴하는 것을 피하고자 하는데

@StateObject를 사용하면 미팅뷰에서 음성 인식기를 단일 인스턴스를 생성하여 앱의 전체 수명 동안 공유가 가능해집니다

ScrumTimer와 SpeechRecognizer 모델은 모두 관찰 가능한 객체이지만, MeetingView에 데이터를 공급하는 방식에는 중요한 차이점이 있습니다. 스크럼 타이머의 미팅 속성은 자주 업데이트될 필요가 있지만 이러한 업데이트는 미팅 뷰의 생명주기와는 관계가 없습니다

반면 음성인식기는 transcript 객체를 생성하지만 transcript 객체는 @published 속성이 필요하지 않습니다

왜냐하면 MeetingView는 속성의 최종값만 알면 되기 때문입니다

그럼 언제부터 음성인식기로부터 데이터를 읽어야하는지 알 수 있을까요?

 

Timing of speech recognition actions

음성 인식기는 오디오 및 transcript 작업의 세부 사항을 처리하고 있습니다

여기에는 장치 접근 권한 확인, 오디오 엔진 시작 및 관리, SFSpeechRecognizer/AVAudioSession 클래스에서 객체 생성 등이 포함되고 있습니다 또한 뷰에서 음성 인식 과정을 제어할 수 있는 여러 메서드를 제공합니다.

다음 튜토리얼에서는 이 메서드들을 사용하여 MeetingView의 생명주기에 중요한 순간에 음성 인식을 제어할 예정입니다

MeetingView가 나타날 때 호출할 메서드들

MeetingView가 나타날 때 다음 메서드들을 호출하게 됩니다:

reset() 메서드

  • 설명: reset() 메서드는 실행 중인 모든 작업을 중지하고 값을 기본값으로 재설정하여 음성 인식기를 전사 준비 상태로 만듭니다.

transcribe() 메서드

  • 설명: transcribe() 메서드는 음성 전사를 시작합니다.

뷰가 사라질 때 다음 작업들이 전사 과정에 영향을 미칩니다

stopTranscribing() 메서드

  • 설명: stopTranscribing() 메서드는 전사를 종료하고 전사 속성에 대한 변경 사항 기록을 중지합니다.

transcript 텍스트를 사용하여 새로운 미팅 기록 생성

  • 설명: 뷰는 transcript된 텍스트를 사용하여 새로운 미팅 기록을 생성합니다.

생명주기 메서드에서 transcript속성과 같은 데이터를 읽음으로 뷰가 사라질 때 한 번만 발생해야 하는 작업을 관리할 수 있는데

SwiftUI는 동적데이터를 관리하고 뷰를 동기화하는데 필요한 모든 도구를 제공하는데 요구 사항ㅇ르 해결하기 위해 어떤 도구를 사용할지 결정하는 것은 효과적인 SwiftUI 앱을 구축하는 데 있어 중요한 과제 중 하나입니다. 여기서 패턴은 여러분이 자신의 앱을 계속 구축해 나가면서 고려할 수 있는 여러 옵션 중 하나 일 뿐입니다

반응형

'SwiftUI' 카테고리의 다른 글

SwiftUI | Hello SwiftUI -1  (0) 2024.08.07
SwiftUI | Transcribing speech to text  (0) 2024.08.06
SwiftUI | Adopting new API features  (0) 2024.08.06
Adopting Swift concurrency  (0) 2024.08.05
SwiftUI | Responding to events  (0) 2024.08.02