Swift 在后台运行某个功能时,如何保持应用程序运行?

Swift 在后台运行某个功能时,如何保持应用程序运行?,swift,xcode,Swift,Xcode,在仍然允许应用程序运行的情况下,是否有一种简单的方法来运行功能 当前,当我按下一个按钮时,它会运行一个函数,但随后会冻结所有其他内容,直到完成为止 while balance < 100 { let docRef = db.collection("data").document("names") docRef.getDocument { (document, error) in if let document = d

在仍然允许应用程序运行的情况下,是否有一种简单的方法来运行功能

当前,当我按下一个按钮时,它会运行一个函数,但随后会冻结所有其他内容,直到完成为止

while balance < 100 {
    let docRef = db.collection("data").document("names")

    docRef.getDocument { (document, error) in
        if let document = document, document.exists {
            let myDocument = document.data()
            self.balance = myDocument?[name] as! Int
        }
    }

    let base = Int.random(in: 1..<21600)
    //print(coin)
    let guess = Int.random(in: 1..<21600)
    //print(guess)
    if guess == base {
        self.balance += 1
        self.setBalance()
    }

    do {
        sleep(1)
    }

}
而余额<100{
让docRef=db.集合(“数据”).文档(“名称”)
docRef.getDocument{(文档,错误)位于
如果let document=document,则存在document{
让myDocument=document.data()
self.balance=myDocument?[name]as!Int
}
}

让base=Int.random(in:1..Sure.iOS和Mac都支持GCD(Grand Central Dispatch),这是Apple的队列和线程模型。您可以将作业提交到后台队列,并提供一个完成处理程序,在工作完成时在主线程上调用该处理程序

不清楚您发布的代码的用途、使用它的上下文,或者它是如何耗时的。您需要编辑您的问题以提供更多信息:

触发要在后台运行的长时间运行任务的函数是什么

任务是什么


长时间运行的工作完成后,您希望执行什么操作?

很抱歉,看起来我忽略了sleep命令,但本质上,只要按下一个按钮,该功能就会运行,按钮变灰,应用程序将一直无响应,直到完成为止。简短回答:不要这样做。永远不要在主线程上使用sleep。这是错误的在整个睡眠期间冻结你的应用程序。你想要的用户体验是什么?是用户点击一个按钮,它开始一个长期运行的任务,并且按钮变暗,直到任务完成?请编辑你的问题以澄清你想要什么,而不是在回答我的评论时发表评论。目的是让你的问题包括您试图解决的问题的完整描述。请编辑您的问题以显示该代码的上下文。如果是iAction方法,请包括
@iAction func functionName()
部分。