Cen*_*nny 3 generics closures void swift swift4
当我尝试迁移到Swift 4时,如果你将Void作为输入,我的通用类型的闭包发生了错误.这在Swift 3中运行良好,但现在没有那么多,任何人都知道为什么,这是一个bug还是一个功能?
通过违反显式处理此案例的另一个闭包,有一种解决方法.但是很高兴不必使用这种解决方法并理解为什么在Swift 4中出现此错误.
typealias Handler<T> = (T) -> Void
func foo(completion: Handler<String>) {
completion("fooing")
}
// This worked in Swift 3, but not in Swift 4
func bar(completion: Handler<Void>) {
completion() // Missing argument for parameter #1 in call
}
Run Code Online (Sandbox Code Playgroud)
看来这不是一个bug,而是Swift现在的工作方式.您不能再省略类型的关联值Void
.
我找到了两个可通过的解决方法:
第一个只是明确地传递了值.
func bar(completion: Handler<Void>) {
completion(())
}
Run Code Online (Sandbox Code Playgroud)
第二种解决方案是为void case声明另一个typealias.
typealias VoidHandler = () -> Void
func barbar(completion: VoidHandler) {
completion()
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
952 次 |
最近记录: |