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 開発に取り掛かる前に、この章を読むことをお勧めします。

また読む価値があるのは、Using Swift with Cocoa and Objective-C の Initialization に関するセクションです。これ上記を繰り返し、ObjC 初期化子とファクトリ メソッドが Swift 初期化子にどのように自動的にマップされるかについての一般的なルールも提供します。イニシャライザおよび/またはファクトリ クラス メソッド、それは Swift イニシャライザにマップされ、構文 で呼び出します。FooinitWithBar:fooWithBar:init(bar:)Foo(bar: someBarValue)

そう:

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

この特定のイニシャライザは形式であることに注意してください。これはinit!、基礎となる ObjC コードが nil を返すことができること、および Swift がイニシャライザ呼び出しの結果をImplicitly Unwrapped Optionalでラップすることを意味します。AVSpeechUtterance.voiceオプション (nil 値を持つものを含む) を受け入れることができるので、問題はありません。しかし、それが変更された場合、または nil 以外の音声を明示的に必要とする API を処理する必要がある場合は、そのオプションをチェックする必要があります。例えば:

if let voice = AVSpeechSynthesisVoice(language: "en-au") {
    // do something with voice
} else {
    // pick another one, maybe?
}
于 2014-10-28T22:25:52.210 に答える