执行使用来自可选变量的方法

时间:2015-08-06 12:14:03

标签: swift optional-binding

如果我需要执行一个多个参数'原始源是可选的方法,那么在执行该方法之前是否进行多个可选绑定是最简洁的方法呢?

e.g。 UIStoryboardSegue的sourceViewController和destionationViewController都是AnyObject?我需要使用source的navigationController来执行某些操作。

 override func perform() {
        var svc = self.sourceViewController as? UIViewController
        var dvc = self.destinationViewController as? UIViewController

        if let svc = svc, dvc = dvc {
            svc.navigationController?.pushViewController(dvc, animated: true)
        }
    }

2 个答案:

答案 0 :(得分:0)

如果视图控制器是Interface Builder中设计的segue的一部分,并且您实际上知道它们不是nil,则可以解包它们

nil

否则,如果源控制器可能为nil,则仅在控制器不为nil时才执行push命令,这就像在Objective-C中向override func perform() { var svc = self.sourceViewController as? UIViewController var dvc = self.destinationViewController as? UIViewController svc.navigationController?.pushViewController(dvc, animated: true) } 发送消息

instance = ec2.instances.create(
:image_id => 'ami-11d68a54',
:instance_type => 'm1.small',
:count => 1, 
:security_groups => 'YOUR_SECURITY_GROUP_NAME', 
:key_pair => ec2.key_pairs['YOUR_KEY_PAIR_NAME']) 

答案 1 :(得分:0)

似乎没有必要创建两个变量,如果你真的想确保可选的值不是nil你可以使用:

override func perform() {
    if let svc = self.sourceViewController as? UIViewController, 
           dvc = self.destinationViewController as? UIViewController {
        svc.navigationController?.pushViewController(dvc, animated: true)
    }
}