首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >准备好多个ViewControllers不能100%工作的问题

准备好多个ViewControllers不能100%工作的问题
EN

Stack Overflow用户
提问于 2016-12-21 16:28:46
回答 1查看 60关注 0票数 0

有4个视图控制器: raceViewController raceInfoViewController abilityCalcViewController abilityFinalViewController

快速概述应用程序的工作原理。首先,用户在abilityCalcViewController中启动,然后更新他们的统计数据,然后单击Select,然后再转到raceViewController。这里有两个按钮,一个指向raceInfoViewController,另一个指向abilityFinalViewController。每个不同的ViewControllers之间都有自己的一组信息要传递。

我的代码是:

代码语言:javascript
运行
复制
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]
            }
        }
    }

我的问题是,当我单击导致abilityFinalViewController的按钮或指向raceInfoViewController的按钮时,它会转换,但是没有传递任何数据。因此,当到达下一个目的地时,destFinalViewController.strStatScore = strStatScore似乎是空白的。我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-21 20:34:56

注意,基于segue标识符决定要做什么的prepareForSegue代码是脆弱的。如果您忘记设置标识符,或者在标识符中有一个错误,则它不起作用。

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

代码语言:javascript
运行
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41267524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档