繁体   English   中英

不确定此 Swift 结构语法与闭包

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM