类型“[String,AnyObject?]”不符合协议 AnyObject?:为什么?

2024-01-16

我试图理解为什么会出现编译错误:类型“[String, AnyObject?]”不符合 AnyObject 协议?

var cars: [String: AnyObject?] = [ "model": "Ferrari"]
var JSON: [String: AnyObject?] = [ "cars": cars ]  // <-- error

这好像是cars不是 AnyObject 吗?我不明白。

感谢您的帮助!


AnyObject必须是一个类,但是Dictionary是一个结构体。

Swift 编程语言:类型转换 https://developer.apple.com/library/prerelease/mac/documentation/Swift/Conceptual/Swift_Programming_Language/TypeCasting.html

AnyObject 可以表示任何类类型的实例。

Swift 编程语言:类和结构 https://developer.apple.com/library/prerelease/mac/documentation/Swift/Conceptual/Swift_Programming_Language/ClassesAndStructures.html#//apple_ref/doc/uid/TP40014097-CH13-XID_135

Swift 的 String、Array 和 Dictionary 类型都是作为结构体实现的。


您可以使用Any?以此目的。

var cars: [String: Any?] = [ "model": "Ferrari"]
var JSON: [String: Any?] = [ "cars": cars ]

仔细观察之后,发现有一个微妙的问题导致了这个问题的发生。

这是一个有效的示例:

var cars: [String: AnyObject] = [ "model": "Ferrari"]
var JSON: [String: AnyObject] = [ "cars": cars ]

它有效是因为cars被强制(隐式投射)自[String: AnyObject]到兼容的对象NSDictionary ([AnyHashable: AnyObject]). This NSDictionary然后将兼容对象转换为AnyObject。所以,魔法。

[String: AnyObject?]不能以这种方式铸造,因为它不是NSDictionary兼容,所以强制失败。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

类型“[String,AnyObject?]”不符合协议 AnyObject?:为什么? 的相关文章

随机推荐

  • 从 EPS 中提取图像数据

    我有一个封装的 PostScript http en wikipedia org wiki Encapsulated PostScript文件似乎只包装了一个图像文件 有没有工具可以从中提取图像数据 convert 将使用ghostscri
  • 发送标头后重定向用户

    据我所知 只要数据已发送到浏览器 那么标头就无法修改 有什么方法 使用 PHP 可以执行重定向以将用户带到另一个页面 显然不使用标头 如果是这样 您能给我指出一些文档吗 决定编写我自己的 php 函数来实现 javascript 重定向 请
  • 是否可以在 WPF 中使用 ReactiveUI 绑定仅通过 INotifyDataErrorInfo 验证用户输入?

    我们在 Net Core WPF 应用程序中使用 ReactiveUI WPF 11 0 1 我们正在考虑将所有基于 XAML 的绑定替换为基于 ReactiveUI 的绑定 域类型有一个 ViewModel 实现了 INotifyProp
  • Ruby on Rails 的隐藏功能 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • UIImageWriteToSavedPhotosAlbum() 不保存裁剪后的图像

    我正在尝试将裁剪后的图像保存到相机胶卷中 我需要以编程方式完成 我不能让用户编辑它 这是我的 仍然很基本 剪切和保存代码 void cutAndSaveImage UIImage rawImage CIImage workingImage
  • JavaFX 中的磨砂玻璃效果?

    我正在制作一个 iOS 7 主题的 JavaFX 2 FXML 项目 我想知道如何使 Rectangle 对象具有类似 iOS7 的磨砂玻璃效果 我还希望它有一个小阴影 这很棘手 因为您可能能够看到半透明物体后面的阴影 我只是希望它出现在边
  • Centos 7 - openjdk8 的 jfx 库在哪里?

    我有centos 7 1 我安装了openjdk8和openjdk devel8 但是 当我尝试在 netbeans 中编译我的 jfx 应用程序时 我得到包 javafx 不存在 经过一番调查 我发现jdk中没有jfxrt jar 除了
  • 在 Archlinux 上设置 Haskell 的建议方法是什么?

    我想要一些关于让 Haskell 在 Archlinux 上工作的 最佳 方法的指导 By work我的意思是所有 就ghci命令行工具 安装我没有的软件包 例如vector space http hackage haskell org p
  • 我到底如何在rails 3中安装restful身份验证插件?

    我对 Rails 3 上的这个 Restful 身份验证插件感到非常困惑 我尝试使用以下命令安装该插件 它告诉我它已经安装了 然后我尝试使用 force重新安装这个插件它告诉我找不到该插件 所以如果插件已经安装为什么我会收到错误Could
  • 使用 Parsec 在 Haskell 中编写小型解析器时出现问题

    我正在尝试使用以下代码为小语言编写解析器 import Text ParserCombinators Parsec import Text Parsec Token data Exp Atom String Op String Exp in
  • 使用 CMake 为 Visual Studio 2012 编译 SFML

    在开始提问之前 我只想澄清一下 我希望 SFML 能够静态链接到 runetime 因为我想静态链接 mvsc dll 这样就没有人需要安装它们或依赖它们 我成功地从网站上完成了这项工作 但它也有同样的问题 到问题了 我从 github 下
  • 使用 getRange() 时如何跳过一列 - Google Apps 脚本

    我似乎无法弄清楚如何将此脚本放在跳过列中L 我尝试了许多不同的品种 但都导致错误 希望有更多经验的人能够指点迷津 我需要I K and M O没有L sheet1 getRange I1 O sheet1 getLastRow getVal
  • 如何提高反序列化速度?

    使用 BinaryFormatter 进行序列化 反序列化 生成的序列化文件大小约为 80MB 反序列化需要几分钟 我该如何改进这一点 这是反序列化代码 public static Universe DeserializeFromFile
  • 在Powershell脚本中传递Jenkins环境变量

    我想在 power shell 脚本中使用 jenkins 环境变量 这里 destination 在 powershell 脚本中为 null 无法识别我在做什么错误 请帮助 bin groovy pipeline agent label
  • 以 Promise.all 为条件 [重复]

    这个问题在这里已经有答案了 我知道这个答案 https stackoverflow com a 31414472 4640499下面的代码是基于它的 它正在工作 但我对某些事情不满意 如果我想进行一些条件检查并基于它解决怎么办 我已经对我想
  • git 与 xcode 快照

    我正在通过 itunesU 视频学习 iOS 编程 并且一直在使用 xcode 我在 xcode 中发现了创建快照的功能 到目前为止 我已经用它来为我的项目在每个主要里程碑拍摄快照 然后我来到关于使用 git 进行版本控制的章节 并按照他们
  • 如何获取scrapy失败的URL?

    我是 scrapy 的新手 这是我所知道的令人惊叹的爬虫框架 在我的项目中 我发送了超过 90 000 个请求 但其中有一些失败了 我将日志级别设置为INFO 我只能看到一些统计信息 但看不到详细信息 2012 12 05 21 03 04
  • 如何在Android国际象棋游戏中制作动画

    我正在为 Android 开发国际象棋游戏 androidchess appspot com http androidchess appspot com 如果我想添加动画 我应该使用扩展Canvas的自定义View 我现在这样做 还是扩展S
  • 不小心创造了病毒?

    我经常看到这种情况发生 我用 Delphi 编写一个应用程序 当我编译它时 病毒扫描程序告诉我我已经创建了一个病毒 然后立即再次删除了可执行文件 这很烦人 但通过完全重建 首先删除 dcu 文件 有时只需等待 即可轻松修复 据我所知 Del
  • 类型“[String,AnyObject?]”不符合协议 AnyObject?:为什么?

    我试图理解为什么会出现编译错误 类型 String AnyObject 不符合 AnyObject 协议 var cars String AnyObject model Ferrari var JSON String AnyObject c