通过故事板Segue传递对象

时间:2017-02-11 16:14:33

标签: ios swift object storyboard segue

我在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)
            }
        }

    }

1 个答案:

答案 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的类型就是正确的。