gpt4 book ai didi

swift - 带有 Void 的通用类型别名在 Swift 4 中给出了缺少参数的错误

转载 作者:搜寻专家 更新时间:2023-10-31 22:01:28 24 4
gpt4 key购买 nike

当我尝试迁移到 Swift 4 时,如果您将 Void 作为输入,我的闭包通用类型别名会发生错误。这在 Swift 3 中运行良好,但现在效果不佳,有人知道为什么,这是错误还是功能?

有一个变通方法是拒绝另一个显式处理这种情况的闭包。但是,如果不必使用此解决方法并了解为什么在 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
}

最佳答案

这似乎不是错误,而是 Swift 现在的工作方式。您不能再省略 Void 类型的关联值。

我发现了两个可行的解决方法:

第一个只是显式地传递值。

func bar(completion: Handler<Void>) {
completion(())
}

第二种解决方案是为无效情况声明另一个类型别名。

typealias VoidHandler = () -> Void

func barbar(completion: VoidHandler) {
completion()
}

关于swift - 带有 Void 的通用类型别名在 Swift 4 中给出了缺少参数的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46273079/

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