如何在 Swift 中的 IF 语句中设置时间延迟?
Posted
技术标签:
【中文标题】如何在 Swift 中的 IF 语句中设置时间延迟?【英文标题】:How can I put a time delay within an IF statement in Swift? 【发布时间】:2021-07-29 23:29:04 【问题描述】:我正在为我在大学的计算课程开发一个 ios 应用程序原型,我用它来证明导航和登录系统的功能。到目前为止,我在这方面取得了成功,一切都按计划进行,尽管我怀疑我是否以正确的方式完成了这件事,因为我还是 Swift 编程语言和 XCode IDE 的新手。
我的问题是,我知道这听起来很愚蠢,因为我的应用程序不允许我在转换到新视图之前有时间延迟。登录成功后,立即跳转到我的主页。但是,我希望应用在成功登录和打开主页之间有短暂的延迟。
我在搜索了不同的方法后尝试了这个方法,当前方法是sleep(UInt32(1.0))
在打开主页之前暂停应用程序 1 秒 - 本节的完整代码如下:
// external if statement for when login succeeds
if authenticationDidSucceed
Text("Login succeeded!")
.font(.headline)
.frame(width: 250, height: 80)
.background(Color.green)
.cornerRadius(20.0)
.foregroundColor(.white)
.animation(Animation.default)
// this is what's broken
sleep(UInt32(1.0))
// calling navigation bar containing other pages
HostingTabBar()
这似乎返回了错误Static method 'buildBlock' requires that 'UInt32' conform to 'View'
,我认为这与它在 if 语句中的事实有关。
如果有人知道解决此问题的任何方法,将不胜感激,如果您需要我附加更多代码 sn-ps 或其他任何内容。
非常感谢您的帮助。
【问题讨论】:
你在哪里将authenticationDidSucceed
设置为true?
在你这样做的时候,你可以这样做DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) authenticationDidSucceed = true
它与 if 语句无关。你读过错误信息吗?睡眠不是你想象的那样。
@aheze authenticationDidSucceed 在单独的代码块中设置为true,用于按下登录按钮时,其中if self.username == storedUsername && self.password == storedPassword
,从这里设置为true。
@aheze 我已经添加了您建议的包含authenticaionDidSucceed = true
行的代码,它可以工作!现在程序在点击按钮后明显暂停了 1 秒钟,但它似乎没有显示“登录成功!”消息,尽管这对我来说可能是一个简单的解决方法。
【参考方案1】:
采用 aheze 的代码建议并将其添加到我的程序中的正确位置已经奏效,现在应用程序在成功登录后暂停一秒钟。这并不完全符合我的需要,因为成功的登录消息现在根本没有出现,可能是由于时间延迟,但是我确信我可以解决这个问题,因为它似乎是一个简单的问题!
aheze 的代码插入到我的程序中:
if self.username == storedUsername && self.password == storedPassword
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0)
self.authenticationDidSucceed = true
再次感谢您的帮助,希望我做得对!
【讨论】:
以上是关于如何在 Swift 中的 IF 语句中设置时间延迟?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 swift UITests 中的 XCUIApplication 中设置暗模式?