是否有一个没有参数并且什么都不返回的函数的简写? AKA() - > ()

时间:2014-06-05 13:25:25

标签: swift

标题说明了一切,我相信。我很好奇() -> ()是否作为一个函数的参数...

class Test {
  var isAwesome = true
  func loadData (callback: () -> ()) {
    callback();
  }
}

...版本较短。那就是它!

4 个答案:

答案 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"