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

SwiftUI调用API报错:‘can not find error in scope’求助

解决SwiftUI中"can not find error in scope"及代码问题

你的代码存在几个编译错误,下面逐一说明并给出修正方案:

  1. 变量作用域错误
    url是fetch()函数内部的局部变量,类顶层的task无法访问这个变量,这是导致编译报错的核心原因。必须把dataTask的创建逻辑放到fetch()函数内部,和url处于同一作用域。

  2. 闭包语法错误
    dataTask的尾随闭包参数应该用逗号分隔,你写的data; error; in是错误写法,正确格式是data, error in。

  3. 未启动网络任务
    创建dataTask后必须调用resume()方法,否则网络请求不会实际执行。

修正后的完整代码:

import SwiftUI

class ViewModel: ObservableObject {
    
    func fetch() {
        guard let url = URL(string: "http://www.themealdb.com/api/json/v1/1/search.php?s=Arrabiata") else {
            print("无效的URL")
            return
        }
        
        // 将dataTask移至fetch函数内部,确保能访问到url
        let task = URLSession.shared.dataTask(with: url) { data, error in
            // 处理请求错误
            guard let data = data, error == nil else {
                print("请求失败: \(error?.localizedDescription ?? "未知错误")")
                return
            }
            
            // 这里添加JSON解析逻辑
            do {
                // 示例:假设你有对应API返回结构的Codable模型
                // let response = try JSONDecoder().decode(MealResponse.self, from: data)
                // DispatchQueue.main.async {
                //     // 切换到主队列更新UI相关的@Published变量
                // }
                print("成功获取数据,数据长度: \(data.count)")
            } catch {
                print("JSON解析失败: \(error.localizedDescription)")
            }
        }
        
        // 启动网络请求任务
        task.resume()
    }
}

// 示例:对应API返回结构的Codable模型(可根据实际需求调整)
// struct MealResponse: Codable {
//     let meals: [Meal]
// }
//
// struct Meal: Codable {
//     let idMeal: String
//     let strMeal: String
//     let strMealThumb: String
//     // 按需添加其他API返回字段
// }

额外新手提示:

  • 网络请求是异步操作,若要更新UI(比如给@Published变量赋值),必须通过DispatchQueue.main.async切换到主队列,否则会引发崩溃。
  • 建议使用Swift的Codable协议解析JSON,这是处理JSON数据的标准方式。
  • 若在iOS环境下运行,需要在Info.plist中配置NSAppTransportSecurity,允许HTTP请求(因为你使用的是http协议),否则系统会拦截请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 08:02:53