Xcode 来自完成处理程序的Swift show view控制器

Xcode 来自完成处理程序的Swift show view控制器,xcode,swift,presentviewcontroller,completionhandler,Xcode,Swift,Presentviewcontroller,Completionhandler,我有一个视图控制器,其中有一个函数“CV”,用于构造视图内容。函数CV有一个完成处理程序,它将itselve作为变量V返回。我现在想做的是,当我创建该视图的一个新实例时,该视图显示V,如下所示: func S0000 (VD0000: O0001) { (self.storyboard!.instantiateViewControllerWithIdentifier("V0005") as! V0005).Cv (VD0000){ (V) -> Void in NS

我有一个视图控制器,其中有一个函数“CV”,用于构造视图内容。函数CV有一个完成处理程序,它将itselve作为变量V返回。我现在想做的是,当我创建该视图的一个新实例时,该视图显示V,如下所示:

func S0000 (VD0000: O0001) {
    (self.storyboard!.instantiateViewControllerWithIdentifier("V0005") as! V0005).Cv (VD0000){ (V) -> Void in
        NSOperationQueue.mainQueue().addOperationWithBlock {
            self.presentViewController(V, animated: true, completion: nil)
        }
    }
}
这将返回错误V==nil,我不明白为什么。我发现如果我这样写的话:

func S0000 (VD0000: O0001) {
    let V = self.storyboard!.instantiateViewControllerWithIdentifier("V0005") as! V0005
    self.showViewController(V, sender: self)
    V.Cv (VD0000){ (V) -> Void in
        NSOperationQueue.mainQueue().addOperationWithBlock {
        }
    }
}
但这违背了它的目的,即只有当它的建造完成时才呈现V


如何执行此操作?

在第一个函数中,视图控制器的实例在函数完成后立即超出范围,因此在调用完成处理程序时不再存在

[编辑]

您可以有一个名为preraringViewController的变量:UIViewController?在包含S000的类中,并在.cv准备视图控制器时使用它保留对视图控制器的引用

var preraringViewController:UIViewController? = nil
func S0000 (VD0000: O0001) 
{
   preraringViewController = self.storyboard!.instantiateViewControllerWithIdentifier("V0005")
   (preraringViewController as! V0005).Cv (VD0000)
    { (V) -> Void in
       NSOperationQueue.mainQueue().addOperationWithBlock {
        self.presentViewController(V, animated: true, completion: nil)
       preraringViewController  = nil
    }
}

}

我不知道从哪里开始:变量和函数应该以小写字母
vd0000
cv
v
开头,而不是
vd0000
v
cv
。一般来说,名字应该是有意义的,没有编号的-不是
VD0000
O0001
S0000
V0005
-我10000%保证除了你之外没有人能理解你的代码。是的,我知道,我把它告诉了自己,所以我一开始就错了,不能真正摆脱它,但我会尝试。重写一切。您将无法处理这种混乱。我如何才能防止这种情况发生?您必须在比S000函数更宽的范围内保留一个实例变量。我编辑了我的答案以给出一个例子。