Swift:参数类型';[字符串:ValueType]';不符合预期的类型';任何对象';
我有以下代码试图将字典转换为NSData:Swift:参数类型';[字符串:ValueType]';不符合预期的类型';任何对象';,swift,generics,Swift,Generics,我有以下代码试图将字典转换为NSData: func dataFromDict<ValueType>(dict: [String:ValueType]) -> NSData { return NSKeyedArchiver.archivedDataWithRootObject(dict) } 但是得到这个错误: 无法在强制中将“[String:ValueType]”类型的值转换为“NSDictionary”类型 为什么?您可以使用NSJSONSerialization
func dataFromDict<ValueType>(dict: [String:ValueType]) -> NSData {
return NSKeyedArchiver.archivedDataWithRootObject(dict)
}
但是得到这个错误:
无法在强制中将“[String:ValueType]”类型的值转换为“NSDictionary”类型
为什么?您可以使用NSJSONSerialization将字典转换为NSData。试试这个
let params = ["key1":"1","key2":"0"] as Dictionary<String, AnyObject>
let data = try? NSJSONSerialization.dataWithJSONObject(params, options:NSJSONWritingOptions.PrettyPrinted) as NSData
让params=[“key1”:“1”,“key2”:“0”]作为字典
让数据=尝试?NSJSONSerialization.dataWithJSONObject(参数,选项:NSJSONWritingOptions.Prettypted)作为NSData
因为archivedDataWithRootObject
需要任何对象
只需强制转换字典即可
func dataFromDict<ValueType>(dict: [String:ValueType]) -> NSData {
return NSKeyedArchiver.archivedDataWithRootObject(dict as! AnyObject)
}
func dataFromDict(dict:[String:ValueType])->NSData{
返回NSKeyedArchiver.archivedDataWithRootObject(dict as!AnyObject)
}
谢谢,这对我很有用。不过,我仍然不明白为什么dict不能转换为NSDictionary。原因是泛型类型与NSDictionary
无关。如果在没有泛型类型的情况下将参数声明为[String:AnyObject]
,则根本不需要强制转换dict
,`不要丢弃类型信息。希望您可以将输入字典值限制为实际类型,以便您知道以后如何解码它们。是的,您可以使用强制转换来消除/忽略编译器警告,它仍然不能解决实际问题。我不能使用“AnyObject”,因为我的代码的其他部分使用类似“Int”的类型实例化类(包含上述func)。在这种情况下,您可以用Int替换AnyObject
func dataFromDict<ValueType>(dict: [String:ValueType]) -> NSData {
return NSKeyedArchiver.archivedDataWithRootObject(dict as! AnyObject)
}