Swift:带有可选链接和 nil-coalescing 的编译时错误

标签 swift optional-chaining

我对 Swift 中的可选链接和 nil-coalescing 有一个奇怪的问题。 谁能解释为什么以下代码无法编译:

class A<T> {
    var val: T
    var x: A<T>?
    var y: A<T>?
    init(t:T){
        val = t
    }
    func test() -> [T] {
        return (self.x?.test() ?? []) + [val] + (self.y?.test() ?? [])
    }
}

但是写的时候

func test() -> [T] {
    return (self.x?.test() ?? []) + ([val] + (self.y?.test() ?? []))
}

是吗? 错误说:

Cannot convert value of type '[T]?' to expected argument type '[_]?'

对我来说,它看起来很像编译器错误。

最佳答案

复杂表达式的类型推断很困难。 [_] 通常意味着类型未知 - 无法推断。简化表达式可以在 99% 的时间内解决问题:

class A<T> {
    var val: T
    var x: A<T>?
    var y: A<T>?
    init(t:T){
        val = t
    }
    func test() -> [T] {
        let xResult = self.x?.test() ?? []
        let yResult = self.y?.test() ?? []

        return xResult + [val] + yResult
    }
}

另外 99% 的时间,类型推断问题可以通过显式指定类型来解决:

return (self.x?.test() as [T]? ?? []) + [val] + (self.y?.test() ?? [])

您自己找到了解决方法。带括号的解决方法删除了一定数量的类型推断路径。

报告为 SR-4309

关于Swift:带有可选链接和 nil-coalescing 的编译时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42936281/

相关文章:

macos - 询问用户是否要退出 OS X 应用程序

javascript - 对象可能是 'undefined' 可选链接 typescript 上的错误

javascript - JSHint 抑制可选链接的错误

javascript - Google Apps 脚本 - 可选的链接抛出 ParseError

javascript - 为什么我在这个可选链中收到 "Object is possibly ' undefined'"?

ios - 如何确保 iOS 应用程序收到服务器发送的每个推送通知?

swift - 让 AR 视频适应背景

ios - 在 Swift 上从 Firebase 检索数据需要很长时间

ios - 回调方法不在 Swift 中从 UIView 调用到 ViewController

ios - UIAlertController addTextFieldWithConfigurationHandler。奇怪的功能