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

这行代码就是您如何更改 obj-c 中的语言的方式。但我想知道是否有人可以告诉我它是如何快速实施的。在文档中使用了这行代码...

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

但我不明白我会在哪里实现它:/

4

1 回答 1

2

init(paramName: ParamType)在 Swift 接口中看到一个名为 的类型Type,你用语法来调用它Type(paramName: paramValue)。这是在Swift 编程语言中的初始化章节的顶部,我建议在深入了解使用 Swift 进行 Cocoa 开发之前先阅读一下。

另外值得一读的是使用 Swift 与 Cocoa 和 Objective-C 中的初始化部分,重复了上述内容,并为您提供了 ObjC 初始化程序和工厂方法如何自动映射到 Swift 初始化程序的一般规则:如果您有一个命名为的 ObjC类初始化器和/或工厂类方法,它映射到 Swift 初始化器,你用语法调用它。FooinitWithBar: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?
}
于 2014-10-28T22:25:52.210 回答