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
相关产品推荐
相关产品推荐

