【发布时间】:2021-12-30 14:21:09
【问题描述】:
在this question我今天看到它定义了一个结构Effect,它有一个属性run,它是一个带有通用参数的闭包:
struct Effect<T> {
let run: (@escaping (T) -> Void) -> Void
}
然后示例代码创建一个Effect<Int> 的实例,并使用类似于尾随闭包语法的东西指定run 属性的闭包:
let anIntInTwoSeconds = Effect<Int> { callback in
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
callback(42)
}
}
是什么使它合法?我希望需要在调用 init 方法时明确指定 run 参数:
let anIntInTwoSeconds = Effect<Int>(run: { callback in
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
callback(42)
}
}
)
任何一个版本都可以编译和工作。 Swift 中的什么使第一个版本合法?我不知道如何构建问题以便寻找答案。
【问题讨论】: