gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 02:23:04 24 4
gpt4 key购买 nike

我有一个 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 后,您将需要继续从上一个索引开始计算。 [你需要一种方法来识别弹出 Controller 何时被关闭——根据你的具体设计,在 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 是类/结构中的一个函数,那么您只需使用 func 就可以避免这种风格。

关于swift - 为 for in 循环添加 break 或 continue 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29718635/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com