为多个ViewControllers而不是100%工作,准备SEGUE问题



有4个视图控制器:RaceViewControllerRaceInfoviewControllerCompunicalCalcViewController能力FinalViewController

快速概述应用程序的工作原理。首先,用户从能力calcviewController开始更新统计数据,然后在完成此操作后,单击"选择Races"按钮,然后将其转到RaceViewController。这里有2个按钮1,导致RaceInfoviewController,另一个按钮1到CommunicationFinalViewController。每个不同的信息都将拥有自己的一组信息,可以在ViewControllers之间传递。

我拥有的代码是:

override func prepare(for segue: UIStoryboardSegue, sender: Any?)
    {
        if segue.identifier == "abilityFinalViewController"
        {
            let destFinalViewController: abilityFinalViewController = segue.destination as! abilityFinalViewController
            destFinalViewController.strStatScore = strStatScore
        }
        else if segue.identifier == "raceInfoViewController"
        {
            let destViewController: raceInfoViewController = segue.destination as! raceInfoViewController
            // Dwarf
            if raceTable.indexPathForSelectedRow == [0,0]
            {
                print(raceTable.indexPathForSelectedRow ?? 0)
                destViewController.raceName = races[0]
                destViewController.raceStat = stats[0]
            }
            // Elf
            else if raceTable.indexPathForSelectedRow == [0,1]
            {
                destViewController.raceName = races[1]
                destViewController.raceStat = stats[1]
            }
            // Gnome
            else if raceTable.indexPathForSelectedRow == [0,2]
            {
                destViewController.raceName = races[2]
                destViewController.raceStat = stats[2]
            }
            // Half Elf
            else if raceTable.indexPathForSelectedRow == [0,3]
            {
                destViewController.raceName = races[3]
                destViewController.raceStat = stats[3]
            }
            // Half-Orc
            else if raceTable.indexPathForSelectedRow == [0,4]
            {
                destViewController.raceName = races[4]
                destViewController.raceStat = stats[4]
            }
            // Halfling
            else if raceTable.indexPathForSelectedRow == [0,5]
            {
                destViewController.raceName = races[5]
                destViewController.raceStat = stats[5]
            }
            // Human
            else if raceTable.indexPathForSelectedRow == [0,6]
            {
                destViewController.raceName = races[6]
                destViewController.raceStat = stats[6]
            }
            // Ifrit
            else if raceTable.indexPathForSelectedRow == [0,7]
            {
                destViewController.raceName = races[7]
                destViewController.raceStat = stats[7]
            }
            // Oread
            else if raceTable.indexPathForSelectedRow == [0,8]
            {
                destViewController.raceName = races[8]
                destViewController.raceStat = stats[8]
            }
            // Sylph
            else if raceTable.indexPathForSelectedRow == [0,9]
            {
                destViewController.raceName = races[9]
                destViewController.raceStat = stats[9]
            }
            // Tengu
            else if raceTable.indexPathForSelectedRow == [0,10]
            {
                destViewController.raceName = races[10]
                destViewController.raceStat = stats[10]
            }
            // Undine
            else if raceTable.indexPathForSelectedRow == [0,11]
            {
                destViewController.raceName = races[11]
                destViewController.raceStat = stats[11]
            }
        }
    }

我的问题是,当我单击导致CommunicationFinalViewController的按钮或转移到RaceInfoviewController的按钮,但没有传递所有数据。因此,当destFinalViewController.strStatScore = strStatScore到达下一个目的地时,它似乎是空白的。我想念什么?

请注意,根据segue标识符决定要做什么的PreparForsegue代码是脆弱的。如果您忘记设置标识符或在标识符中有错字,则它不起作用。

在Swift中,我更喜欢使用基于目标视图控制器类切换的开关语句:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    switch segue.destinationViewController {
    case let miniCarContainerViewController as MiniCartConatinerViewController:
        //Code to configure MiniCartConatinerViewController
        print("Destination is class MiniCartConatinerViewController")
    case let addOnsItemViewController as AddonsItemViewController:
        //Code to configure AddonsItemViewController
        print("Destination is class MiniCartConatinerViewController")
    default:
        print("Destination is unknown class!")
        break
    }
}

case let语法确实具有双重责任,因为它会根据目标视图控制器的类别为您的局部变量施放到正确的类型。

顺便说一句,班级名称和类型名称应始终以Swift中的上案字母开头。可变名称应以较低的案例字母开头。因此,您的abilityFinalViewController类应为AbilityFinalViewControllerraceInfoViewController应为RaceInfoViewController

最新更新