gpt4 book ai didi

swift - 如何摆脱 Swift 闭包中的 $0?

转载 作者:可可西里 更新时间:2023-11-01 01:40:05 25 4
gpt4 key购买 nike

假设我有一个类:

class Test {
func someMethod() {}

init(closure:(Test)->Void) {
closure(self)
}
}

我可以在另一个类的另一个方法中这样调用init(1)

Test {
$0.someMethod()
}

或者像这样(2)

Test { t in
t.someMethod()
}

是否有任何可能的解决方案允许在没有“$0”或“t”的情况下编写完全相同的内容?我想得到这个代码(3)

Test {
someMethod()
}

行为必须与 (1) 或 (2) 中的行为完全相同。

这可能吗?也许不是闭包,而是其他一些 Swift 特性?

我想做这样的 Kotlin 类型安全构建器:http://kotlinlang.org/docs/reference/type-safe-builders.html

最佳答案

不确定你在追求什么,但我想知道这个小巫术是否对你有用:

    class Test {
var name : String
init(_ name:String) {self.name = name}
func someMethod() { println("Hi, my name is \(name)") }
}
let f = Test.someMethod
let t1 = Test("matt")
let t2 = Test("bealex")
f(t1)() // Hi, my name is matt
f(t2)() // Hi, my name is bealex

要点是 f(t1) 本身是一个函数,当被调用时,它会将 someMethod 发送到实例 t1。您或许可以从中获得一些好处。

关于swift - 如何摆脱 Swift 闭包中的 $0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30561020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com