Ios 如何安全地尝试在Swift中执行segue,同时忽略/手动处理可能的异常?
我正在尝试在我的项目中使用自定义视图控制器,它可能有3个分段。但这些并不是强制性的。 当视图控制器加载时,我正在调用一个方法“Ios 如何安全地尝试在Swift中执行segue,同时忽略/手动处理可能的异常?,ios,swift,segue,Ios,Swift,Segue,我正在尝试在我的项目中使用自定义视图控制器,它可能有3个分段。但这些并不是强制性的。 当视图控制器加载时,我正在调用一个方法“trySegues()”,该方法应该尝试执行所有3个步骤。Segue是自定义的,因此每个成功的调用都将在我的代码中处理和注册 在Objective-C中,我会使用“@try-@catch”,这样所有成功的调用都会继续进行,而如果没有设置其中一个segue,它会引发异常,但它将由我手动处理,因此不会中断程序的执行 在Swift中有没有同样的方法? 使用Optionals来模
trySegues()
”,该方法应该尝试执行所有3个步骤。Segue是自定义的,因此每个成功的调用都将在我的代码中处理和注册
在Objective-C中,我会使用“@try
-@catch
”,这样所有成功的调用都会继续进行,而如果没有设置其中一个segue,它会引发异常,但它将由我手动处理,因此不会中断程序的执行
在Swift中有没有同样的方法?
使用Optionals来模拟异常将不起作用,因为performsguewithidentifier函数不返回任何值。以任何想象不到的方式,都是
@try
-@catch
-使用performsguewithidentifier:
解决此问题的适当方法。不在Objective-C中,不在Swift中
Segues不能(或不应该)独立于故事板而存在。毕竟,如果您试图实例化一个segue,那么类名就是UI故事板segue。这个类甚至公开存在的事实并不是为了让您可以实例化它并在运行时添加它。它的存在使您可以对segue进行子类化,在情节提要上选择您的子类,并设置具有自定义行为的segue:
在Objective-C和Swift中,例外是为真正的异常行为保留的。在发展期可以预防的行为。在发布应用程序之前,我们不应该在运行时依赖于@try
-@catch
块。我们应该已经修复了我们的应用程序,这样就没有什么可捕获的了
这么说来,performsguewithidentifier:
可以引发异常的唯一方法是如果我们提供的segue标识符不存在。segue不应该存在的唯一原因是因为我们在某处打错了
分段在编译时连接和定义。没有公共机制来检查某个特定的segue是否存在,因为我们根本不应该这样做
现在,尽管如此,如果我们想在运行时动态推送或以模式呈现特定的视图控制器,并且我们无法在编译时知道它将是什么视图控制器(或者从哪个视图控制器获取它),那么我们不应该通过segue来呈现它 相反,我们应该使用定义的一个表示选项 你的选择是:
presentViewController(uquo;动画:完成:)
showViewController(\uu:sender:)
showtailviewcontroller(\uu:sender:)
dismissViewControllerAnimated(uu:completion:)