斯威夫特:与像kotlin一样的接收器关闭?

时间:2019-04-07 13:32:06

标签: swift lambda kotlin closures

你好,我想知道是否有相当于kotlin lambda的接收器,很快?

赞:

fun <T> T.apply(block: T.() -> Unit): T

T.()等同于这种做法吗?

1 个答案:

答案 0 :(得分:2)

我对Kotlin的带有接收器的 lambda 并不熟悉,但是据我阅读Kotlin文档

  • Swift中没有直接等效项
  • 可以通过添加参数或使用currying实现相同的功能

但是,在Swift中,不能在通用T上定义扩展函数,其中T是任何类型。因此,像您的T.apply之类的东西必须是带有两个参数的全局函数。

使用Curry,Swift中的apply会像这样:

func apply<T>(_ this: T, block: (T)->()->T) -> T {
    return block(this)()
}

您可以像这样使用它:

var result = apply("Abc") {this in {this.uppercased()+this.lowercased()}}
print(result) //->ABCabc