swift - 从 AVSpeechSynthesisVoice 获取国家/地区列表

标签 swift avspeechsynthesizer avspeechutterance

我正在尝试获取在 AVSpeechSynthesisVoice 中找到的区域代码,而不是例如:en-GB

我想要的输出如下

enter image description here

这是我当前的代码,虽然它有效,但我觉得必须有一个更优雅的解决方案,从我读到的内容来看,用 - 分割可能会对某些语言产生错误

let speechVoices = AVSpeechSynthesisVoice.speechVoices()

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    let language = Locale.current.localizedString(forLanguageCode: speechVoices[row].language)!
    let languageCode = speechVoices[row].language

    var regionCodeArray = languageCode.split(separator: "-") // FIXME: buggy may break
    let regionCode = regionCodeArray.removeLast()

    // Must be a more elegant way to get RegionCode
    let country = Locale.current.localizedString(forRegionCode: String(regionCode))

    return "\(language) (\(country ?? ""))"
}

谢谢!

最佳答案

所以我想到了另一种不需要拆分的替代方案,这就是我得到的,但我欢迎替代答案,或者在我学习和寻求改进时对我的代码进行评论

let speechVoices = AVSpeechSynthesisVoice.speechVoices()

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    let language = Locale.current.localizedString(forLanguageCode: speechVoices[row].language)!
    let languageCode = speechVoices[row].language

    var regionCode:String = ""
    for region in Locale.isoRegionCodes {
        // Test if provided region codes has voices or not
        if languageCode.contains(region) {
            regionCode = region
        }
    }

    let country = Locale.current.localizedString(forRegionCode: String(regionCode))

    return "\(language) (\(country ?? ""))"
}

关于swift - 从 AVSpeechSynthesisVoice 获取国家/地区列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62322476/

相关文章:

ios - Swift 支持 WebRTC 吗?

ios - 使用 TwitterKit/Fabric 身份验证失败获取单个推文

swift - AVSpeech合成器语言

ios - 实时更改 AVSpeechUtterance 速率

ios - 快捷方式是什么/如何在 Xcode 中编写函数后创建函数

swift - 如何快速计算从现在到某个日期的天、小时、分钟

ios - 如何在 iOS 7 中使用 AVSpeechSynthesizer 改变说话时的语速

ios - iOS AVSpeechSynthesizer 是否支持嵌入式语音命令

Swift - 完成后重置/重启 SpeechSynthesizer

ios - 说话停不下来