我正在努力解决看似简单的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
任何想法在这里发生了什么?
答案 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]的转换不起作用。