gpt4 book ai didi

ios - 将 Dictionary 转换为 AnyObject 时出现编译器错误?

转载 作者:可可西里 更新时间:2023-11-01 00:38:07 27 4
gpt4 key购买 nike

我正在尝试在 Swift 中做一个简单的扩展,这将使使用 NSJSONSerialization.dataWithJSONObject 将字典转换为 JSON NSData 变得容易。 .

extension Dictionary {
func toJSONData() -> NSData! {
return NSJSONSerialization.dataWithJSONObject(self, options: nil, error: nil)
}
}

我不太明白为什么这不会编译。它给了我一个类型错误:

Cannot downcast from 'Dictionary<Key, Value>' to non-@objc protocol type 'AnyObject'

有什么想法吗?我用 Google 搜索了一圈,没找到任何东西。

注意事项:

我已经测试过了,它工作得很好:

return NSJSONSerialization.dataWithJSONObject(["":""], options: nil, error: nil)

最佳答案

(来 self 上面的评论:) 问题是不是所有的 Swift 字典都可以转换为 AnyObject,只有那些类型为 [NSObject: AnyObject] 。并且定义仅适用于某些受限泛型类型的泛型类型的扩展似乎是不可能的(数组扩展有类似的问答)。

您可以使用一个函数(正如 Nate 在他的回答中所建议的那样),或者定义一个扩展改为 NSDictionary


Swift 2 的更新:从 Swift 2 开始,您可以定义仅适用于某些受限泛型类型的泛型类型的扩展:

extension Dictionary where Key : NSObject, Value : AnyObject {
func toJSONData() -> NSData! {
return try? NSJSONSerialization.dataWithJSONObject(self, options: [])
}
}

然后

let d1 = ["foo" : "bar"].toJSONData()

按预期编译和工作,但是

struct Bar {} 
let d2 = [ "foo" : Bar() ].toJSONData()

无法编译,因为 Bar() 不是 AnyObject

关于ios - 将 Dictionary 转换为 AnyObject 时出现编译器错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26718196/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com