将Dictionary转换为AnyObject时发生编译器错误?

牛c

我正在尝试在Swift中进行一个简单的扩展,从而可以轻松地将Dictionary转换为JSON NSData NSJSONSerialization.dataWithJSONObject

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'

有任何想法吗?我已经四处搜寻,却找不到任何东西。

笔记:

我已经对此进行了测试,并且效果很好:

return NSJSONSerialization.dataWithJSONObject(["":""], options: nil, error: nil)
马丁·R

(根据我上面的评论:)问题在于,并非所有Swift字典都可以转换为AnyObject,只有type可以转换为[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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将java.util.list转换为java.util.list时发生编译器错误?

来自分类Dev

在vue组件的<script lang =“ ts”>代码内将查询选择器结果转换为HTMLElement时发生编译错误

来自分类Dev

尝试从私有实例调用模板方法时发生编译器错误

来自分类Dev

在模板类中使用unordered_map时发生编译器错误

来自分类Dev

使用BOOST_FUSION_ADAPT_STRUCT调整结构时发生编译器错误

来自分类Dev

构造std :: function的向量时发生编译器错误

来自分类Dev

指向std :: vector <bool>的元素时发生编译器错误?

来自分类Dev

插入共享内存中的映射的映射时发生编译器错误

来自分类Dev

应用带有数据绑定的主题时发生编译器错误

来自分类Dev

指向std :: vector <bool>的元素时发生编译器错误?

来自分类Dev

构造std :: function的向量时发生编译器错误

来自分类Dev

在Scala对象中访问子类的方法时发生编译器错误

来自分类Dev

较少转换为SASS时发生编译错误

来自分类Dev

在Java中将数组转换为Set时发生编译错误

来自分类Dev

较少转换为sass时发生编译错误

来自分类Dev

在使用PyInstaller创建的应用程序的InnoSetup中使用GetStringFileInfo时,发生编译器错误

来自分类Dev

如何在将模板转换为任意类型时避免编译器错误

来自分类Dev

UseDotNetNativeToolchain为true时发生内部编译器错误

来自分类Dev

尝试在ScalaFx中绑定鼠标事件侦听器时发生编译错误

来自分类Dev

将List添加为参数时发生编译错误

来自分类Dev

将案例类的伴随对象用作类型参数时发生编译错误

来自分类Dev

将Lambda表达式传递给模板函数时发生编译错误

来自分类Dev

是否可以将数组作为枚举中的属性?发生编译时错误

来自分类Dev

将数组/指针传递到库中的过程时发生编译错误

来自分类Dev

在列表中使用通配符时发生编译时错误

来自分类Dev

声明`errno`时发生编译时错误

来自分类Dev

运行多个C文件时发生编译时错误

来自分类Dev

将'this'指针从项转换为const项和编译器错误

来自分类Dev

处理2个将C#转换为F#的编译器错误

Related 相关文章

  1. 1

    将java.util.list转换为java.util.list时发生编译器错误?

  2. 2

    在vue组件的<script lang =“ ts”>代码内将查询选择器结果转换为HTMLElement时发生编译错误

  3. 3

    尝试从私有实例调用模板方法时发生编译器错误

  4. 4

    在模板类中使用unordered_map时发生编译器错误

  5. 5

    使用BOOST_FUSION_ADAPT_STRUCT调整结构时发生编译器错误

  6. 6

    构造std :: function的向量时发生编译器错误

  7. 7

    指向std :: vector <bool>的元素时发生编译器错误?

  8. 8

    插入共享内存中的映射的映射时发生编译器错误

  9. 9

    应用带有数据绑定的主题时发生编译器错误

  10. 10

    指向std :: vector <bool>的元素时发生编译器错误?

  11. 11

    构造std :: function的向量时发生编译器错误

  12. 12

    在Scala对象中访问子类的方法时发生编译器错误

  13. 13

    较少转换为SASS时发生编译错误

  14. 14

    在Java中将数组转换为Set时发生编译错误

  15. 15

    较少转换为sass时发生编译错误

  16. 16

    在使用PyInstaller创建的应用程序的InnoSetup中使用GetStringFileInfo时,发生编译器错误

  17. 17

    如何在将模板转换为任意类型时避免编译器错误

  18. 18

    UseDotNetNativeToolchain为true时发生内部编译器错误

  19. 19

    尝试在ScalaFx中绑定鼠标事件侦听器时发生编译错误

  20. 20

    将List添加为参数时发生编译错误

  21. 21

    将案例类的伴随对象用作类型参数时发生编译错误

  22. 22

    将Lambda表达式传递给模板函数时发生编译错误

  23. 23

    是否可以将数组作为枚举中的属性?发生编译时错误

  24. 24

    将数组/指针传递到库中的过程时发生编译错误

  25. 25

    在列表中使用通配符时发生编译时错误

  26. 26

    声明`errno`时发生编译时错误

  27. 27

    运行多个C文件时发生编译时错误

  28. 28

    将'this'指针从项转换为const项和编译器错误

  29. 29

    处理2个将C#转换为F#的编译器错误

热门标签

归档