Swift 访问Mac OS NSSpeechSynthesizer库中的语音属性

Swift 访问Mac OS NSSpeechSynthesizer库中的语音属性,swift,Swift,我很难理解如何访问语音属性。我知道这可能是一个新手问题,在Swift中这是一个非常基本的问题,但我一辈子都搞不懂。根据这个网站,, 我可以通过访问字典访问语音属性。我找到了一个名为姓名、年龄、性别等属性的列表。 但是,当我调用给定语音标识符的属性时,我会得到一堆奇怪的值,我无法访问任何内容: 我最近的一次尝试是这样做,但没有成功: struct ttsVoice { let name: String let language: String } let tts = NSSpee

我很难理解如何访问语音属性。我知道这可能是一个新手问题,在Swift中这是一个非常基本的问题,但我一辈子都搞不懂。根据这个网站,, 我可以通过访问字典访问语音属性。我找到了一个名为姓名、年龄、性别等属性的列表。 但是,当我调用给定语音标识符的属性时,我会得到一堆奇怪的值,我无法访问任何内容: 我最近的一次尝试是这样做,但没有成功:

struct ttsVoice {
    let name: String
    let language: String
}

let tts = NSSpeechSynthesizer()
let availableVoices = NSSpeechSynthesizer.availableVoices
let voiceMap: [ttsVoice]=[]
func listVoices() -> Void {
    availableVoices.forEach { element in
        let voiceDictionary = NSSpeechSynthesizer.attributes(forVoice: element)
let name = voiceDictionary["name"]

}
    }
我尝试过许多其他方法,有些人说我无法将字符串转换为NSVoiceAttributeKey,等等。这一个只是说无法将“string”类型的值转换为预期的参数类型“NSSpeechSynthesizer.VoiceAttributeKey”,engine.swift,错误

以前有人这样做过吗?我相信这很简单


谢谢。

我想出来了。这是非常违反直觉的。Appparently此词典将VoiceAttributeKey作为键,而不是字符串。因此,您需要像这样做:

    availableVoices.forEach { element in
        let voiceDictionary = NSSpeechSynthesizer.attributes(forVoice: element)
        let name = voiceDictionary[NSSpeechSynthesizer.VoiceAttributeKey.name]!
        let language = voiceDictionary[NSSpeechSynthesizer.VoiceAttributeKey.localeIdentifier]!
print("voice \(name) speaks \(language)")
}
谢谢