为for循环添加break或continue语句

时间:2015-04-18 14:29:15

标签: swift for-loop for-in-loop

我有一个for循环,循环遍历一些对象,当它在循环中找到一个特定值时,我想要一个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)
    }
}

这已经简化为了达到目的。

1 个答案:

答案 0 :(得分:1)

解雇你的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变量,并根据提供的results重复处理index中的元素。

注意:Swift在递归函数方面不是很迅速;因此使用processFrom作为隐式解包的可选项。根据您的代码,如果processFrom是类/结构中的函数,那么您只需使用func即可避免使用此样式。