utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"en-au"];
这段确切的代码是你如何改变obj-c中的语言。但我想知道是否有人,可以告诉我它是如何在swift中实现的。在文档中使用了这行代码......
init!(language language: String!) -> AVSpeechSynthesisVoice
但我无法理解我将在哪里实施它:/
答案 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?
}