2016-11-17 69 views
1

说我有了一个完成处理程序函数,然后调用另一个函数,像这样完成处理程序:如果不需要调用完成处理程序,可以继续执行吗?

func register(withCompletion complete: @escaping (() -> Void)) { 
    self.sendRegisterRequest(withCompletion: { (error: Error?) ->() in 

     if error != nil { 
      self.performSegue(withIdentifier: "ErrorVCSegue", sender: nil) 
     } 
     else { 
      complete() 
     } 
    }) 
} 

在一个错误的情况下,它会与调用complete() Segue公司了。

我可以像这样离开,不需要拨打complete()?我不需要从此函数返回,因为我现在想要转到另一个View Controller。

谢谢。

+0

这是这样做的一个办法,更好地在你关闭发送错误状态一边打电话,在那里,你可以检查错误状态,并做适当的动作。 –

回答

2

这是一个坏主意。无论如何应该调用完成处理程序。来电者正在等待回应。它想知道何时完成。这是完成处理程序的关键。在你的情况下(和许多其他情况一样),如果完成处理程序接受了一个布尔参数(和/或一个错误参数),那将会好很多。这样完成处理程序提供了关于该方法成功或失败的一些基本信息。

0

尝试这样

override func viewDidLoad() { 
    super.viewDidLoad() 
    register { (error) in 
     if error == nil { 
      // do what you want in success case 
     } else { 
      self.performSegue(withIdentifier: "ErrorVCSegue", sender: nil) 
     } 
    } 
} 

func register(withCompletion complete: @escaping ((_ error: Error?) -> Void)) { 
    self.sendRegisterRequest(withCompletion: { (error: Error?) ->() in 
     complete(Error) 
    }) 
} 

谢谢:)

相关问题