标题说明了一切,我相信。我很好奇() -> ()
是否作为一个函数的参数...
class Test {
var isAwesome = true
func loadData (callback: () -> ()) {
callback();
}
}
...版本较短。那就是它!
答案 0 :(得分:4)
我不确定是否有" Swift-way"要做到这一点,但如果你真的想缩短它:
typealias A = ()->() // alias this closure risking readability
class Test {
func loadData (callback:A) {
callback();
}
}
我想这是一个黑客攻击。
答案 1 :(得分:3)
发现于:Apple Inc.' Swift Programming Language'。 iBooks的。 https://itun.es/nl/jEUH0.l 您可以使用以下语法:
func someFunctionThatTakesAClosure(closure: () -> ()) {
// function body goes here
}
// here's how you call this function without using a trailing closure:
someFunctionThatTakesAClosure({
// closure's body goes here
})
// here's how you call this function with a trailing closure instead:
someFunctionThatTakesAClosure() {
// trailing closure's body goes here
}
答案 2 :(得分:1)
我找不到任何指定不同解决方案的文档。我在当前的文档/书中找到的每个实例都显示了它是如何拥有它的。 Here是一个讨论它的好部分。但是,您可以使用一些非常简短的表示法来调用您的方法:
loadData {
// ...
}
而不是将其视为正常参数:
loadData({
// ...
})
你也可以这样称呼:
loadData() {
// ...
}
答案 3 :(得分:0)
我认为没有短路:我可以想象一个type-alias
(如@Benzi所提到的),但效果似乎不值得这样做。
func takeEmptyFunc(emptyFunc: ()->()) { emptyFunc() }
func emptyFunc() { println("Worked"); }
takeEmptyFunc() { emptyFunc() } // prints "Worked"