Ios 为什么Swift不将此Int数组文字转换为正确的类型?

Ios 为什么Swift不将此Int数组文字转换为正确的类型?,ios,arrays,swift,types,Ios,Arrays,Swift,Types,我一直在处理Leetcode上的一些问题,复习我的Swift,然后遇到了这个奇怪的错误 代码如下: // Definition for a binary tree node. public class TreeNode { public var val: Int public var left: TreeNode? public var right: TreeNode? public init(_ val: Int) { self.v

我一直在处理Leetcode上的一些问题,复习我的Swift,然后遇到了这个奇怪的错误

代码如下:

 // Definition for a binary tree node.
 public class TreeNode {
     public var val: Int
     public var left: TreeNode?
     public var right: TreeNode?
     public init(_ val: Int) {
         self.val = val
         self.left = nil
         self.right = nil
     }
 }

class Solution {
    func inorderTraversal(_ root: TreeNode?) -> [Int] {
        guard let root = root else {
            return []
        }

        if root.left == nil && root.right == nil {
           return [root.val]
        } else {
            return inorderTraversal(root.left) + [root.val] + inorderTraversal(root.right)
        }
    }
}
也就是说,如果我试图像上面那样将数组连接在一行中,我会得到一个错误
“Int”不能转换为“[Int]”

但是,如果我为中间值创建一个名为
middle
的单独变量,并使用该变量而不是
[root.val]
,则它可以正常工作,不会出现错误


Swift似乎没有足够的信息知道在某些上下文中
[root.val]
是一个Int数组。为什么会这样?

关于这一点,我们将讨论Swift编译器的问题。我不能用任何证据来证明这一点,但通过向Swift编译器多暗示一点,问题就消失了。

我尝试了它,它对我来说很好,没有任何错误。你使用的是什么版本的Xcode/Swift?我可以确认XC 9.2游乐场中的行为。它在Xcode 9.3.1(Swift 4.1)中工作,所以他们显然已经解决了这个问题。我在Xcode 9.0中试过了,所以我得到了同样的错误。