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

Swift Segue传值报错:无法将Response类型赋值给Meals类型

问题解决:Segue传值类型不匹配错误

错误原因

你直接把Response类型的resultsData赋值给Meals类型的destination.meals,两者类型完全不兼容——Response是包含[Meals]?数组的结构体,而MealsViewController需要的是单个Meals实例。

修正后的prepare(for:sender:)代码

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let destination = segue.destination as? MealsViewController,
       let selectedIndexPath = tableView.indexPathForSelectedRow,
       let selectedMeal = resultsData?.meals?[selectedIndexPath.row] {
        destination.meals = selectedMeal
    }
}

关键修正点

  • 获取当前选中的indexPath,定位用户点击的行对应的数据
  • 通过可选链安全解包resultsData?.meals?[selectedIndexPath.row],避免空值引发崩溃
  • 将解包后的单个Meals实例赋值给目标控制器的meals属性

额外优化建议

把MealsViewController中meals属性的默认初始化改为可选类型,逻辑更严谨:

var meals: Meals?

override func viewDidLoad() {
    super.viewDidLoad()
    nameLbl.text = meals?.strMeal
    idLbl.text = meals?.idMeal
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 23:17:25