2015-04-18 2 views
2

У меня есть цикл for, который выполняет итерацию по нескольким объектам, когда он находит определенное значение внутри цикла. Я хочу, чтобы popUpViewController всплывал и показывал некоторую информацию, тогда после того, как пользователь отклонил popUpViewController, я хочу, чтобы итерация продолжалась, и если он снова находит другое значение для всплытия снова и т. д. и т. д., пока итерация не закончится, это мой код и где я хочу, но я не уверен, как это сделать. код:Добавление инструкции break или continue для цикла for for

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

Я могу угадать проблему ... но ради качества вопроса вы должны фактически объяснить фактические результаты, которые производит этот код, и как это отличается от результатов, которые вы хотите увидеть. – nhgrif

ответ

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.

+0

Спасибо, это помогло мне достичь того, чего я хотел. –

Смежные вопросы