为 for in 循环添加 break 或 continue 语句

Adding a break or continue statement for a for in loop

我有一个 for in 循环,它遍历多个对象,当它在循环中找到某个值时,我希望弹出一个 popUpViewController 并显示一些信息,然后一旦用户关闭了 popUpViewController,我然后希望迭代继续,如果它再次找到另一个值再次弹出,依此类推,直到迭代完成,这是我的代码以及我要做的事情,但我不知道该怎么做它。代码:

var popUpViewController = PopUpViewControllerSwift(
var results = [1,2,3,1,2,3,1,2,3]

for result in results {
    if result == 2 {
       self.view.addSubview(self.popUpViewController.view)
       self.addChildViewController(self.popUpViewController)
       self.popUpViewController.setValues(UIImage(named: "Me.png"), messageText: "You have matched with \(usernameOne)!", congratsText: "Snap!")
       self.popUpViewController.didMoveToParentViewController(self)
    }
}

这已经被简化到重点。

关闭 PopUpViewControllerSwift 后,您将需要继续从上一个索引开始计算。 [你需要一种方法来识别弹出控制器何时被关闭——根据你的具体设计,在 UIKit 中有很多方法可以做到这一点。例如,在 viewDidDisappear()] 中。要从最后一个索引继续,请定义一个函数,该函数接受该索引,进行匹配,然后使用 index + 1 递归调用自身以继续。

let processFrom : ((index:Int) -> Void)!
processFrom     = {(index:Int) -> Void) in
  if index < results.count {
    let result = results[index]

    if result == 2 {
       // setup view

       // provide the continuation - assumes `onDismiss` is defined
       // as a closure to be used when the view is dismissed.
       self.popupViewController.onDismiss = { processFrom (index + 1) }
    }
    else { processFrom (index + 1) }
  }
}

processFrom 捕获 results 变量并根据提供的 index.

重复处理来自 results 的元素

注意:关于递归函数,Swift 不是很 swift;因此使用 processFrom 作为隐式展开的可选。根据您的代码,如果 processFrom 是 class/struct 中的一个函数,那么您只需使用 func.

就可以避免这种风格