2017-02-11 49 views
0

我在TableViewController中有以下segue,每个表行都有一个Fruit对象。我想将每行的对象传递给一个视图控制器,该视图控制器显示关于连续对象的更多细节,所以我在下面编写了segue以跨视图控制器传输Fruit对象。通过故事板传递一个对象Segue

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

'var chosenFruit = Fruit'应该是'var chosenFruit:Fruit?' – Callam

回答

3

你想要做的是正确的,你可以将对象设置为segue中的下一个viewController。

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

var chosenFruit = Fruit 

你在做什么这里保存类型水果给变量chosenFruit。这就是为什么当你尝试设置水果类型的实例为selectedFruit时,它说cannot pass type Fruit to type Fruit.type。该变量具有Fruit类型的类型,并且您正试图设置实例。

你应该做的,而不是被设置choseFruit变量如下:

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

这样,VAR的类型是正确的。

+0

它的工作!谢谢! – ch1maera