2017-06-30 50 views
0

Swift Playground提供了以下代碼。如何在不傳入參數的情況下調用sayText(圖形:)? (顯然圖形已經放置在代碼的另一個段)如何在不傳入值的情況下使用參數調用函數? [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是具有屬性onGraphicTouched(Graphic) ->()型這是一種功能/閉合採用一個Graphic作爲輸入,並返回任何的Tool類型的(Void())。

speakText(graphic:)是一個指向上面定義函數的函數指針。請注意,該功能具有所需的簽名;它需要一個Graphic並不會返回任何內容。

所以speakTool.onGraphicTouched = speakText(graphic:)的指針函數分配給onGraphicTouched和當圖形被觸摸時,speakTool將調用onGraphicTouched(someGraphic)它將調用speakText(graphic: 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

相關問題