通过准备segue传输数据

时间:2016-12-03 02:01:33

标签: ios swift segue

我遇到了一个问题,我似乎无法理解为什么会这样。

  

我在一个新的Swife上创建了一个名为“Apples”的类并调用它   苹果。

import java.util.Random;
import java.util.Set;
import java.util.HashSet;

public class TwoDigitGenerator {

    public static void main(String[] args) {

        // Generate 10 unique random numbers with desired properties.
        Set<Integer> usedNumbers = new HashSet<>();
        while (usedNumbers.size() < 10)
            usedNumbers.add(randomNumber());

        // Convert the set of numbers to an Integer array.
        Integer[] numbers = usedNumbers.toArray(new Integer[usedNumbers.size()]);

        for (Integer number : numbers)
            System.out.println(number);
    }

    public static int randomNumber() {
        Random random = new Random();
        String number = "";
        number += 1 + random.nextInt(7); // Generate first digit between 1 and 7 inclusively
        number += random.nextInt(8); // Generate second digit between 0 and 7 inclusively
        return Integer.parseInt(number);
    }

}
  

构造了一个名为points的结构来定义apple参数

class Apples { 
   var points = points()
   var appleName = String?
}
  

并构建了一个制作新苹果的功能

struct points {

  var taste = 0
  var smell = 0
  var texture = 0
  var color = 0


}
  

然后我有2个ViewControllers,1个是AppleViewController,而且   第二个是ChoiceViewController。

     

我致电

func newApples(t:Int, s: Int, tex: Int, col: Int, appName = String)
{
  let newApple = Apples()
  newApple.points.taste = t
  newApple.points.smell = s
  newApple.points.texture = tex
  newApple.points.color = col
 newApple.appleName = appName
}
   AppleViewController

上的

     

在ChoiceViewController上,我得到了一些UILabel Outlet(appleLabel)   我希望根据用户选择的Apple改变   第一个AppleViewController

     

问题在于我尝试制作Prepare(for segue :)功能

let pinkLady = newApples(t: 5, s: 4, tex: 4, col: 5, appName = "Pink Lady")
  

在最后一行代码中存在问题,当我运行时   应用程序并单击没有代码行的按钮(准备segue)   函数它执行segue就好了,但它调用它   “致命错误:在打开一个Optional时意外发现nil   值“

     

我尝试了各种语法,例如

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let choiceVC = segue.destination as! ChoiceViewController  
        choiceVC.appleLabel.text = pinkLady.appleName
    }
  

然后我试着把

     

打印((pinkLady.appleName)!)

     

在prepare(for segue)函数内部以及何时执行它   打印到控制台Pink Lady没问题。我真的不喜欢   知道我在这里失踪了什么。

1 个答案:

答案 0 :(得分:-1)

Make an object say pinkLadyInChoice, in ChoiceVC of type  Apples.
and pass pinkLady object to declared above, here pinkLadyInChoice, through prepareForSegue Method.
Then in ChoiceVC set text of labels by using object pinkLadyInChoice here.

从ApplesVC传递pinkLady对象到ChoiceVC strPinkLady对象

在choiceVC中写下以下内容: -

let strPinkLady : Apples 
choiceVC.appleLabel.text = strPinkLady.appleName