无法将类型为“[Thing]”的值分配给“[Any]”类型的值

时间:2015-04-16 06:28:09

标签: ios xcode cocoa swift

我正在努力解决看似简单的Swift问题。

我已经使用静态函数声明了struct,该函数返回了一些实例:

struct Thing {
    static func allTheThings() -> [Thing] {
        ...
    }
}

我的CustomViewController声明了一个属性:

var objects = [Any]()

viewDidLoad()中该控制器的子类中,我尝试分配objects属性。

objects = Thing.allTheThings()

但我收到编译错误

Cannot assign a value of type '[Thing]' to a value of type '[Any]'

不是Any的全部内容吗?

这有效:

objects = Thing.allTheThings().map { $0 }

但这不是

let things = Thing.allTheThings().map { $0 }
objects = things

任何想法在这里发生了什么?

1 个答案:

答案 0 :(得分:0)

似乎Swift可以将Thing转换为Any而不是[Thing]转换为[Any]。

这是有效的原因

 objects = Thing.allTheThings().map { $0 }

是编译器可以推断出$ 0的类型是Any,但在第二个例子中

let things = Thing.allTheThings().map { $0 }

它推断$ 0是Thing类型。你最终得到的东西是[Thing]类型,这意味着分配

objects = things

表示从[Thing]到[Any]的转换不起作用。