2017-06-30 1 views
0

Swift Playgroundで次のコードを提供しました。 speakText(graphic:)はどのようにパラメータを渡すことなく呼び出されますか?値を渡さずにパラメータを持つ関数をどのように呼び出すことができますか? [Swift Playground]

// Speak the text of graphic. 
func speakText(graphic: Graphic) { 
    speak(graphic.text) 
} 
func addGreeting(touch: Touch) { 
    if touch.previousPlaceDistance < 60 { return } 
    let greetings = ["howdy!", "hello", "hi", "ciao", "yo!", "hey!",  "what’s up?"] 
    let greeting = greetings.randomItem 
    let graphic = Graphic(text: greeting) 
    graphic.textColor = #colorLiteral(red: 0.9686274529, green: 0.78039217, blue: 0.3450980484, alpha: 1) 
    graphic.fontName = .chalkduster 
    scene.place(graphic, at: touch.position) 
    graphic.rotation = randomDouble(from: -30, to: 30) 
} 
// Create and add Speak tool. 
let speakTool = Tool(name: "Speak", emojiIcon: "") 
speakTool.onGraphicTouched = speakText(graphic:) 
scene.tools.append(speakTool) 

答えて

1

speakToolは、入力としてGraphicを受け取り、何も返さない関数/クロージャがあるタイプのものである(Graphic) ->()onGraphicTouchedを有するタイプToolである(明らかにグラフィックが既にコードの別のセグメントに配置されています) (Voidまたは())。

speakText(graphic:)は、上記で定義した関数への関数ポインタです。その関数には必要な署名があることに注意してください。 Graphicが必要で、何も返しません。

だからspeakTool.onGraphicTouched = speakText(graphic:)onGraphicTouchedに関数へのポインタを割り当て、グラフィックをタッチすると、speakToolspeakText(graphic: someGraphic)を呼び出しますonGraphicTouched(someGraphic)を呼び出します。

あなたはApple's Swift Guide.

+0

Thxをして関数型のセクションでこれについての詳細を読むことができます!このトピックについて詳しく知ることができるドキュメントまたはリファレンスをご存知ですか? –

+0

関数の種類については、https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Functions.html#//apple_ref/doc/uid/TP40014097-CH10-ID158のセクションを参照してください。 – vacawama

関連する問題