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

SwiftUI调用API填充List报ObservedObject要求Video遵守ObservableObject错误

错误根源

你出现报错的核心原因是类名拼写混淆:你定义的符合ObservableObject协议的网络请求类是复数形式的Videos,但你在ContentView里初始化的是单数形式的Video——Video是你定义的纯数据结构体,本身没有遵守ObservableObject协议,完全不能用于@ObservedObject声明。
除此之外你还存在List遍历对象未定义的问题,整体修复方案如下:


修复步骤

1. 修正@ObservedObject初始化代码

把ContentView里报错的那行替换成正确的网络请求类实例:

// 错误写法
// @ObservedObject var videoObject = Video()

// 修正后写法
@ObservedObject var videoObject = Videos()

2. 修正List遍历逻辑

你当前的List直接使用了不存在的description变量,需要绑定请求回来的视频数组,Video已经遵守Identifiable协议,可以直接遍历:

// 错误的List写法
/*
List(description, id: \.self) { description in
      Text(description)
}
*/

// 修正后的List写法,可直接渲染视频标题、描述等内容
List(videoObject.videoDataArray) { video in
    VStack(alignment: .leading, spacing: 4) {
        Text(video.heading ?? "无标题")
            .font(.headline)
        Text(video.description ?? "无简介")
            .font(.subheadline)
            .foregroundColor(.gray)
    }
}

3. 可选优化(避免崩溃风险)

你当前网络请求里的强制解包(StartEventResponse.data_array?.video)!在接口返回空值时会直接闪退,建议改成可选绑定处理空值:

DispatchQueue.main.async {
    if let videos = StartEventResponse.data_array?.video {
        self.videoDataArray = videos
    } else {
        // 可自行添加空数据提示逻辑
        print("未获取到有效视频数据")
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 20:36:02