コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【SwiftUI】音声認識の許可を async / await で行う例

ソースコード

final class VoiceRecognitionRequester {

    static func request() async -> Bool {
        // アプリが特定のタイプのメディアをキャプチャできるようにするための
        // ユーザーの許可を要求します。
        if await !AVCaptureDevice.requestAccess(for: .audio) {
            return false
        }

        // アプリが音声認識を実行できるようにするようユーザーに求めます。
        return await SFSpeechRecognizer.requestAuthorization() == .authorized
    }
}

extension SFSpeechRecognizer {
    static func requestAuthorization() async -> SFSpeechRecognizerAuthorizationStatus {
        await withCheckedContinuation { continuation in
            SFSpeechRecognizer.requestAuthorization { status in
                continuation.resume(returning: status)
            }
        }
    }
}

使用例

.onAppear {
    Task {
        async let result = VoiceRecognitionRequester.request()
        if await result {
            print("許可された")
        }
    }
}