You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift 4 Playground(MacOS)新手求助:获取远程JSON的title值失败

解决Swift Playground中解码远程JSON数组获取title的问题

嘿,我一眼就看出问题啦!你请求的远程JSON是一个Post对象数组,但你却尝试把它解码成单个Post实例,这就是为什么print(object.title)没输出预期结果——其实解码过程已经抛出错误了,只是你把error的打印注释掉了,所以没发现~

问题核心

你调用的接口返回的是这样的结构(简化版):

[
  {"userId": 1, "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit", "body": "..."}
  // 更多Post对象...
]

是一个数组,不是单个Post对象,所以用decoder.decode(Post.self, from: jsonData)会直接触发错误分支。

修改后的完整代码

我标注了关键修改点,你可以直接运行测试:

import Foundation
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true

// Create structer of Post
struct Post: Codable {
    var userId: Int
    var title: String
    var body: String
}

// Remote JSON to Structed Object
let url = URL(string: "https://jsonplaceholder.typicode.com/posts")!
do {
    let jsonData = try Data(contentsOf: url)
    let decoder = JSONDecoder()
    // 关键修改:解码成Post数组类型 [Post].self
    let posts = try decoder.decode([Post].self, from: jsonData)
    
    // 安全获取第一个元素的title(处理数组为空的边界情况)
    if let firstTitle = posts.first?.title {
        print("第一个Post的title:\(firstTitle)")
    } else {
        print("数组为空,没有找到title")
    }
} catch {
    // 建议保留错误打印,方便调试解码问题
    print("解码错误:\(error)")
}

额外小提示

  • 永远不要忽略错误捕获,注释掉print(error)会让你错过关键的调试信息
  • 使用posts.first?.title这种可选链写法,能避免数组为空时触发崩溃

内容的提问来源于stack exchange,提问作者user7890002

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:49:14