我有一个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)
}
}
这已经简化为了达到目的。
答案 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
即可避免使用此样式。