Swift avspeechsynthesizer不同的语言

时间:2014-10-28 15:10:44

标签: swift xcode6 avspeechsynthesizer

utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"en-au"];

这段确切的代码是你如何改变obj-c中的语言。但我想知道是否有人,可以告诉我它是如何在swift中实现的。在文档中使用了这行代码......

init!(language language: String!) -> AVSpeechSynthesisVoice

但我无法理解我将在哪里实施它:/

1 个答案:

答案 0 :(得分:2)

如果您在Swift界面中看到名为init(paramName: ParamType)的类型的Type,则使用语法Type(paramName: paramValue)调用它。这是关于 Swift编程语言Initialization一章的顶部,我推荐在阅读之前阅读它,然后再使用Swift进行Cocoa开发。

另外值得一读的是使用Swift with Cocoa和Objective-C 中的Initialization部分,它重复了上述内容,并为您提供了ObjC初始化器和工厂方法的一般规则自动映射到Swift初始值设定项:如果您有一个名为Foo的ObjC类,其初始化程序为initWithBar:和/或工厂类方法fooWithBar:,则会映射到Swift初始化程序init(bar:)然后用语法Foo(bar: someBarValue)调用它。

所以:

utterance.voice = AVSpeechSynthesisVoice(language: "en-au") // g'day, mate

请注意,此特定初始值设定项的格式为init! - 这意味着底层ObjC代码可以返回nil,并且Swift将初始化程序调用的结果包装在Implicitly Unwrapped Optional中。由于AVSpeechUtterance.voice可以接受一个可选项(包括一个零值的可选项),因此您可以明确表示。但是如果这种情况发生了变化,或者你需要处理明确要求非零语音的API,那么你应该检查一下是否可选; e.g:

if let voice = AVSpeechSynthesisVoice(language: "en-au") {
    // do something with voice
} else {
    // pick another one, maybe?
}