Swift:用类似kotlin的接收器关闭?

Swift:用类似kotlin的接收器关闭?,swift,lambda,kotlin,closures,Swift,Lambda,Kotlin,Closures,您好,我想知道是否有等同于kotlin lambda的接收器,在swift中 像这样: fun <T> T.apply(block: T.() -> Unit): T fun T.apply(块:T.()->单位):T T.()swift中有类似的做法吗?我不熟悉Kotlin的lambda with receiver,但就我阅读的Kotlin文档而言 Swift中没有直接的等价物 同样的功能也可以通过添加参数或货币化来实现 但是,在Swift中,您不能在泛型T上定义扩展

您好,我想知道是否有等同于kotlin lambda的接收器,在swift中

像这样:

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

T.()
swift中有类似的做法吗?

我不熟悉Kotlin的lambda with receiver,但就我阅读的Kotlin文档而言

  • Swift中没有直接的等价物
  • 同样的功能也可以通过添加参数或货币化来实现
但是,在Swift中,您不能在泛型
T
上定义扩展函数,其中
T
是任何类型。因此,类似于您的
T.apply
的东西需要是一个具有两个参数的全局函数

对于咖喱,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

什么是
T.()
,一个静态/类函数?不,没有等价物,我实际上认为这是一件好事。你能提供一些用例吗?最好找到一个用例的等价物,而不是语法等价物。@Sulthan
没有等价物,实际上我认为这听起来很主观,考虑到lambda和receiver结合起来非常好。可能也是主观的。