如何在不传入值的情况下调用带参数的函数? [迅捷游乐场]

Posted

技术标签:

【中文标题】如何在不传入值的情况下调用带参数的函数? [迅捷游乐场]【英文标题】:How is it possible to call a function with parameters without passing in values? [Swift Playground] 【发布时间】:2017-06-30 16:42:36 【问题描述】:

Swift Playground 提供了以下代码。不传入参数如何调用 speakText(graphic: )? (显然图形已经放在另一段代码中了)

// 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】:

speakToolTool 类型,它有一个onGraphicTouched 类型的属性(Graphic) -&gt; (),它是一个函数/闭包,它接受Graphic 作为输入并且什么都不返回(Void 或@987654329 @)。

speakText(graphic:) 是指向上面定义的函数的函数指针。请注意,该函数具有所需的签名;它需要 Graphic 并且什么都不返回。

所以speakTool.onGraphicTouched = speakText(graphic: ) 将指向函数的指针分配给onGraphicTouched,当触摸图形时,speakTool 将调用onGraphicTouched(someGraphic),而speakText(graphic: someGraphic) 将调用。

您可以在Apple's Swift Guide.中的函数类型部分阅读更多相关信息

【讨论】:

谢谢!你知道我可以阅读更多关于这个主题的文档或参考吗? 查看函数类型部分:developer.apple.com/library/content/documentation/Swift/…

以上是关于如何在不传入值的情况下调用带参数的函数? [迅捷游乐场]的主要内容,如果未能解决你的问题,请参考以下文章

如何在不传递预期参数但使用它已有的参数的情况下调用 sub?

如何在不知道匹配返回的 json 数据中的所有值的情况下从 .Net 核心中的 Web api 调用创建模型?

尝试在不指定返回参数的情况下调用存储的函数“dbname”。“functionname”

如何在不连接 Powershell 的情况下传递参数? [复制]

如何在不获取输出的情况下调用发送函数?

JSON.net:如何在不使用默认构造函数的情况下反序列化?