【问题标题】:Need help to write different if statement需要帮助来编写不同的 if 语句
【发布时间】:2020-02-25 20:54:12
【问题描述】:

(我是)Xcode 的新手。

我正在制作这个应用程序,首先我有 3 个视图控制器;每个人都用一个按钮互相交谈:从第一个按钮到第二个按钮,然后继续。问题是:我在第一个 viewcontroller 中放置了一些开关,它们为第二个 viewcontroller 执行 segue,更改标签。第一个 viewcontroller 有 2 个按钮 - 其中一个是开关 segue 的一部分,另一个是第三个 viewcontroller。现在我的问题:当我单击第一个视图控制器上的第二个按钮时,它工作得很好,但是如果单击 swicth 而不是 segue 的按钮,则应用程序崩溃的第二个按钮。

这是我的转场:

if switch1?.isOn == true
              {
              let secondController = segue.destination as! SecondViewController
                secondController.myString1 = "blabla"; ()

正如我所说:它不会干扰应用程序的正常使用,但是如果我点击开关,而不是点击segue的按钮,而是点击第三个viewcontroller的按钮,应用程序就会崩溃。

Could not cast value of type 'app2.ViewController' (0x103879548) to 'app2.SecondViewController' (0x1038793a0).
2020-02-25 20:43:39.507421+0000 app2[18433:249963] Could not cast value of type 'app2.ViewController' (0x103879548) to 'app2.SecondViewController' (0x1038793a0).

我需要一种方法来编写一个条件,即如果单击 segue 之外的其他按钮,则开关应该关闭。

任何帮助将不胜感激。

【问题讨论】:

    标签: xcode segue uiswitch


    【解决方案1】:

    您收到的这条错误消息意味着segue.destination 不是SecondViewController 类型的,实际上它似乎是ViewController 类型。这很可能意味着您必须进入情节提要并更仔细地检查:

    1. 你的segue,看看它的目的地是否实际上是SecondViewController类型
    2. 情节提要的 Custom Class 部分 Identity Inspector 确保您为相关视图控制器选择了 ClassModule

    以上答案几乎都在this post 中,还有一些上下文/细节

    【讨论】:

    • 感谢您的帮助。我调查了您的建议,但最终真正奏效的是遵循 Xcode 每次出现某些代码错误时向我们发送的红色按钮的建议并建议修复:让 secondController = segue.destination as? SecondViewController secondController?.myString1 = "blabla"; () 因为我是新手,我不知道这意味着什么,但它确实有效。
    • 干得好。而且很有趣!我原以为? 运算符会导致编译时错误,而! 只会导致运行时错误。出于好奇,如果您愿意查看它,如果您遗漏第二个问号,它是否仍然会产生编译器错误,因此:let secondController = segue.destination as? SecondViewController secondController.myString1 = "blabla"; () 另外,如果您好奇here 是 Apple 开发人员页面类型- 使用as!? 进行投射:
    • 你好。是的,没有“?”的错误就在那里。感谢 Apple 页面的提示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    相关资源
    最近更新 更多