【问题标题】:Passing an Object Through a Storyboard Segue通过 Storyboard Segue 传递对象
【发布时间】:2017-02-11 16:14:33
【问题描述】:

我在TableViewController 中有以下转场,每个表格行都有一个 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)
            }
        }

    }

【问题讨论】:

  • var chosenFruit = Fruit 应该是var chosenFruit: Fruit?

标签: ios swift object storyboard segue


【解决方案1】:

您尝试做的是正确的,您可以将对象设置为 segue 中的下一个 viewController。

这里的问题不在于segue,但我相信它在FruitDescriptionViewController 中。你有一个这样的变量集:

var chosenFruit = Fruit

您在这里所做的是将 Fruit 类型保存到变量 chosenFruit。这就是为什么当您尝试将 Fruit 类型的实例设置为 selectedFruit 时,它会显示 cannot pass type Fruit to type Fruit.type。该变量具有 Fruit 类型的类型,并且您正在尝试设置一个实例。

您应该做的是设置 selectedFruit 变量如下:

var chosenFruit: Fruit? //or var chosenFruit: Fruit! if its necessary

这样,var 的类型就正确了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    • 2012-05-27
    • 2016-08-06
    相关资源
    最近更新 更多