如何在 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 3 中设置 UIButton 的图像?

如何在 swift UITests 中的 XCUIApplication 中设置暗模式?

如何在 swift 4 中的 UserDefalts 中设置自定义类数组数据

如何在 Swift 4 CoreData 中设置合并策略

如何在 Swift 中设置属性本身可变的属性值

如何在Android中设置文本之间的延迟