Xcode 来自完成处理程序的Swift show view控制器
我有一个视图控制器,其中有一个函数“CV”,用于构造视图内容。函数CV有一个完成处理程序,它将itselve作为变量V返回。我现在想做的是,当我创建该视图的一个新实例时,该视图显示V,如下所示: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
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函数更宽的范围内保留一个实例变量。我编辑了我的答案以给出一个例子。