Добавление оператора break или continue для цикла for in

У меня есть цикл 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)
    }
}

Это было упрощено, чтобы добраться до сути.


person Henry Brown    schedule 18.04.2015    source источник
comment
Я могу догадаться о проблеме ... но ради качества вопроса вы должны на самом деле объяснить фактические результаты, которые дает этот код, и чем они отличаются от результатов, которые вы хотите увидеть.   -  person nhgrif    schedule 18.04.2015


Ответы (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.

person GoZoner    schedule 18.04.2015
comment
Спасибо, это помогло мне достичь того, чего я хотел. - person Henry Brown; 18.04.2015