我在TableViewController
中有以下segue,每个表行都有一个Fruit对象。我想将每行的对象传递给一个视图控制器,该控制器显示有关该行中对象的更多详细信息,因此我已经编写了下面的segue来跨视图控制器传输Fruit对象。
在FruitDescriptionViewController
中,我无法弄清楚如何定义将从行中获取对象的变量,因为它不允许我定义变量var chosenFruit = Fruit
在segue中,我收到错误cannot pass type Fruit to type Fruit.type
我如何通过segue传递Fruit对象并将其存储在FruitDescriptionViewController
中的Fruit变量中?
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "FruitDetails" {
if let indexPath = tableView.indexPathForSelectedRow {
var fruit = fruits[indexPath.row]
let controller = segue.destination as? FruitDescriptionViewController
controller?.chosenFruit = Fruit(name: fruit.name, url: fruit.url, fruitArray: fruit.fruitArray)
}
}
}
答案 0 :(得分:3)
您要做的是正确的,您可以将对象设置为segue中的下一个viewController。
这里的问题不是关于segue,但我相信它在FruitDescriptionViewController
中。你有一个像这样的变量集:
var chosenFruit = Fruit
您在此处执行的操作是将类型Fruit保存到变量chosenFruit
。这就是为什么当你尝试将Fruit类型的实例设置为selectedFruit时,它会说cannot pass type Fruit to type Fruit.type
。该变量具有Fruit类型,您尝试设置实例。
您应该做的是将chooseFruit变量设置如下:
var chosenFruit: Fruit? //or var chosenFruit: Fruit! if its necessary
这样,var的类型就是正确的。