在将Expression implicitly coerced from 'Any?' to Any
类型值作为Any?
类型参数传递时,会引发警告Any?
,但我不知道正在进行投射的位置。它似乎也只发生在字典值上。下面的示例显示了它何时发生:
func someFunc(_ aParam : Any?) {}
let testDict : Dictionary<String, Any?> = ["Test": "Hello"];
someFunc(testDict["Test"]);
如果使用正常Any?
值调用函数,则没有警告,如下所示:
let test : Any? = nil;
someFunc(test);
答案 0 :(得分:3)
字典查找返回可选值,因为该键可能不存在。对于不存在的键,查找返回nil
,因此查找字典的类型必须是可选的。
在您的情况下,您的值的类型为Any?
,因此从该字典中查找会返回一个双重包含的可选Any??
。因此,您尝试将Any??
类型的值传递给需要Any?
的函数。
如果使用可选绑定来处理和解包字典访问,一切正常:
let testDict : Dictionary<String, Any?> = ["Test": "Hello"];
if let value = testDict["Test"] {
// "Test" key is valid
someFunc(value);
}
答案 1 :(得分:0)
只需使用Dictionary<String, Any>
代替Dictionary<String, Any?>
作为Dictionary
类型。
let testDict : Dictionary<String, Any> = ["Test": "Hello"];
someFunc(testDict["Test"]);