combineText

Little_Machine_Human_·2025년 1월 11일

이 코드는 사용자의 키보드 입력과 음성 인식(STT) 입력을 동시에 관리하는 바인딩을 구현한 것이다.
텍스트 변경이 키보드에 의한 것인지 음성 인식에 의한 것인지 구분하여 적절히 처리한다.

현재 진행하고있는 프로젝트에서 자주쓰이는 코드라 정의해본다.

// private 접근자를 가진 combinedText라는 Binding<String> 타입의 computed property를 정의
private var combinedText: Binding<String> {
   // Binding 객체를 생성하여 반환. getter와 setter를 포함
   Binding(
       // getter: reWriteText와 STTtempText를 합쳐서 반환
       get: { reWriteText + STTtempText },
       
       // setter: 새로운 값이 들어올 때 실행되는 로직
       set: { newValue in
           // 새로운 값의 길이가 기존 텍스트 길이의 합과 다르다면 (키보드 입력이 있었다는 의미)
           if newValue.count != reWriteText.count + STTtempText.count {
               // 마이크가 활성화되어 있다면
               if micisPressed {
                   // 마이크 비활성화
                   micisPressed = false
                   // 음성 인식 중지
                   speechRecognizer.stopTranscribing()
               }
               // 새로운 값을 reWriteText에 저장
               reWriteText = newValue
               // STTtempText 초기화
               STTtempText = ""
               return
           }
           
           // 새로운 값의 길이가 reWriteText 길이보다 크거나 같은 경우
           if newValue.count >= reWriteText.count {
               // 새로운 값에서 reWriteText 길이만큼 앞부분을 제외한 나머지 부분
               let sttPart = String(newValue.dropFirst(reWriteText.count))
               
               // sttPart가 현재 STTtempText와 다르다면
               if sttPart != STTtempText {
                   // STTtempText를 새로운 sttPart로 업데이트
                   STTtempText = sttPart
               } else {
                   // 같다면 전체 텍스트를 reWriteText에 저장
                   reWriteText = newValue
                   // STTtempText 초기화
                   STTtempText = ""
               }
           } else {
               // 새로운 값의 길이가 reWriteText보다 작은 경우
               // 새로운 값을 reWriteText에 저장
               reWriteText = newValue
               // STTtempText 초기화
               STTtempText = ""
           }
       }
   )
}
profile
while(true){ 가족(); 건강(); 자기개발(); }

0개의 댓글