"隐含任意?任何演员"通过Any时发出警告?输入变量为Any?类型参数

时间:2017-07-27 11:59:14

标签: swift

在将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);

2 个答案:

答案 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"]);