[英]Uncertain of this Swift struct syntax with closure
我被一些 Swift 结构语法难住了。
对于常规结构,我了解如何定义和初始化它。
struct Thing {
let name: String
}
let aThing = Thing(name: "The Name")
但是我在阅读一些关于函数式编程的内容时遇到了这种语法,最让我难过的是初始化。
struct Effect<T> {
let run: (@escaping (T) -> Void) -> Void
}
// What is "callback" here? How does this work?
let anIntInTwoSeconds = Effect<Int> { callback in
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
callback(42)
}
}
anIntInTwoSeconds.run { theInt in
print(theInt)
}
如果我用“普通”初始化程序看到它,我会理解的,但是这条线上发生了什么? 这种语法叫什么,所以我可以进一步研究它?
let anIntInTwoSeconds = Effect<Int> { callback in
Effect type
的声明
struct Effect<T> {
将 Effect 定义为使用 Generic 类型 T。因此您可以创建适用于不同类型的 Effect 对象。
线
let anIntInTwoSeconds = Effect<Int> { callback in
创建一个作用于 Ints 的 Effect object,并将其分配给变量anIntInTwoSeconds
。
{ callback in
部分定义了 Effect object 的闭包。 该声明可以这样重写:
let anIntInTwoSeconds = Effect<Int>(run: { callback in
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
callback(42)
}
}
)
你可以解释为:
'创建一个 Effect 结构的实例,其run
属性包含以 "{ callback in" 开头的闭包...'
(这很令人困惑,因为 run 属性本身就是一个闭包。所以我们创建了一个 Effect 的实例,并传递给它一个作为闭包的“运行”值。)
具体来说,“callback in”部分告诉编译器,在该闭包内,闭包的参数应命名为“callback”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.