斯威夫特:参数类型“[字符串:值类型]”不符合预期的类型“AnyObject”
我有下面的代码试图字典转换为NSData的:斯威夫特:参数类型“[字符串:值类型]”不符合预期的类型“AnyObject”
func dataFromDict<ValueType>(dict: [String:ValueType]) -> NSData {
return NSKeyedArchiver.archivedDataWithRootObject(dict)
}
编译器给了我这个错误传递dict
作为参数:
Argument type '[String:ValueType]' does not conform to expected type 'AnyObject'
编辑:
@v adian的解决方案为我工作。
我也试着投词典到NSDictionary
:
return NSKeyedArchiver.archivedDataWithRootObject(dict as NSDictionary)
但收到此错误:
Cannot convert value of type '[String:ValueType]' to type 'NSDictionary' in coercion
为什么?
由于archivedDataWithRootObject
预计AnyObject
只投字典
func dataFromDict<ValueType>(dict: [String:ValueType]) -> NSData {
return NSKeyedArchiver.archivedDataWithRootObject(dict as! AnyObject)
}
您可以使用NSJSONSerialization将字典转换为NSData。试试这个
let params = ["key1":"1","key2":"0"] as Dictionary<String, AnyObject>
let data = try? NSJSONSerialization.dataWithJSONObject(params, options:NSJSONWritingOptions.PrettyPrinted) as NSData
我不能使用'AnyObject',因为我的代码的其他部分实例化类型为'Int'的类(包含上述func)。 – ubertao
在这种情况下,你可以用Int替换AnyObject –
不要扔掉类型信息。希望您可以将输入字典值限制为实际类型,以便以后知道如何解码它们。是的,你可以使用强制转换消除/忽略编译器警告,但它仍然不能解决实际问题。 –