Там, где вы видите init(paramName: ParamType)
в интерфейсе Swift для типа с именем Type
, вы вызываете его с синтаксисом Type(paramName: paramValue)
. Это прямо в начале главы на Инициализация на Язык программирования Swift, который я рекомендую прочитать, прежде чем углубляться в разработку Cocoa с помощью Swift.
Также стоит прочитать раздел Инициализация в разделе Использование Swift с Cocoa и Objective-C, в котором повторяется вышеизложенное, а также дается общее правило того, как инициализаторы ObjC и фабричные методы автоматически сопоставляться с инициализаторами Swift: если у вас есть класс ObjC с именем Foo
с инициализатором initWithBar:
и/или методом фабричного класса fooWithBar:
, он сопоставляется с инициализатором Swift init(bar:)
, и вы вызываете его с синтаксисом Foo(bar: someBarValue)
.
So:
utterance.voice = AVSpeechSynthesisVoice(language: "en-au") // g'day, mate
Обратите внимание, что этот конкретный инициализатор имеет форму init!
— это означает, что базовый код ObjC может возвращать nil, и что Swift упаковывает результат вызова инициализатора в Неявно развернутый вариант. Поскольку AVSpeechUtterance.voice
может принимать необязательное значение (в том числе с нулевым значением), вы в безопасности. Но если это когда-либо изменится, или если вам нужно иметь дело с API, которые явно требуют ненулевого голоса, вы должны отметить этот необязательный параметр; например.:
if let voice = AVSpeechSynthesisVoice(language: "en-au") {
// do something with voice
} else {
// pick another one, maybe?
}
person
rickster
schedule
28.10.2014