Swift 3 - 如何从包含字符串的索引中读取 json 输出

Posted

技术标签:

【中文标题】Swift 3 - 如何从包含字符串的索引中读取 json 输出【英文标题】:Swift 3 - How to read a json output from an index that contains a string 【发布时间】:2018-09-06 15:16:28 【问题描述】:

我正在使用 api 来获取一些 json 信息,这是一个示例:

multimedia: [

  url: "small.jpg"
  format: "small"
,

  url: "medium.jpg"
  format: "medium"
,
 url: "large.jpg"
  format: "large"
  
]

如您所见,多媒体容器有许多大小不同的图像 url,我只想读取其中一个,例如仅 medium.jpg 的 url。

我的代码是这样的,它首先读取多媒体容器:

let randomImg = result[random]["multimedia"] as! [[String: AnyObject]]

然后我创建了另一个变量来读取我想要的索引:

let randomImgIndex = randomImg[1]

所以当我尝试获取最终字符串时,我得到了错误:

let finalImgUrl = randomImgIndex[random]["url"] as! String

错误:无法使用“Int”类型的索引为“[String : AnyObject]”类型的值下标

我对 swift 很陌生,所以我完全迷路了。

【问题讨论】:

Swift 4 有Decodable,这使得这样的事情变得非常容易。你有什么理由推迟升级到 Swift 4? 嗯,我被教导使用 swift 3,所以我不得不坚持下去,当我有点适应 swift 3 时,我没有信心跳到 swift 4。 【参考方案1】:

randomImgIndex 已经是所需的字典。

变化:

let finalImgUrl = randomImgIndex[random]["url"] as! String

到:

let finalImgUrl = randomImgIndex["url"] as! String

附带说明,您需要停止使用所有!as! 运算符。如果数据不完全符合预期,您的应用程序将崩溃。当您获取超出您控制范围的数据时进行防御性编码。

【讨论】:

谢谢你,成功了。并且尝试遵循该建议,这通常是当我注意到使用的某些东西不起作用时! ?等有时会修复它,所以我养成了这样做的习惯。

以上是关于Swift 3 - 如何从包含字符串的索引中读取 json 输出的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SwiftUI 中获取字符串索引?

如何从特定索引 swift 3 中拆分数组? [复制]

如何从 Swift 3 中的数据中读取属性列表

如何在swift中将字符索引从layoutManager转换为String scale

Swift - 如何从 UIPickerView 生成数据的许多 UITextField 中读取数据 [关闭]

在 Swift 的嵌套循环中从特定索引枚举字符串