utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"en-au"];
这行代码就是您如何更改 obj-c 中的语言的方式。但我想知道是否有人可以告诉我它是如何快速实施的。在文档中使用了这行代码...
init!(language language: String!) -> AVSpeechSynthesisVoice
但我不明白我会在哪里实现它:/
utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"en-au"];
这行代码就是您如何更改 obj-c 中的语言的方式。但我想知道是否有人可以告诉我它是如何快速实施的。在文档中使用了这行代码...
init!(language language: String!) -> AVSpeechSynthesisVoice
但我不明白我会在哪里实现它:/
你init(paramName: ParamType)
在 Swift 接口中看到一个名为 的类型Type
,你用语法来调用它Type(paramName: paramValue)
。这是在Swift 编程语言中的初始化章节的顶部,我建议在深入了解使用 Swift 进行 Cocoa 开发之前先阅读一下。
另外值得一读的是使用 Swift 与 Cocoa 和 Objective-C 中的初始化部分,它重复了上述内容,并为您提供了 ObjC 初始化程序和工厂方法如何自动映射到 Swift 初始化程序的一般规则:如果您有一个命名为的 ObjC类初始化器和/或工厂类方法,它映射到 Swift 初始化器,你用语法调用它。Foo
initWithBar:
fooWithBar:
init(bar:)
Foo(bar: someBarValue)
所以:
utterance.voice = AVSpeechSynthesisVoice(language: "en-au") // g'day, mate
请注意,这个特定的初始化程序是这种形式的init!
——这意味着底层的 ObjC 代码可以返回 nil,并且 Swift 将初始化程序调用的结果包装在一个隐式展开的 Optional中。因为AVSpeechUtterance.voice
可以接受一个可选的(包括一个具有 nil 值的),所以你很清楚。但是,如果这种情况发生了变化,或者如果您需要处理明确需要非零语音的 API,您应该检查该选项;例如:
if let voice = AVSpeechSynthesisVoice(language: "en-au") {
// do something with voice
} else {
// pick another one, maybe?
}