我有很长的代码,并且在执行此代码期间可以刷新UI以通知用户。
我尝试使用dispatchQueue
来执行此操作,但是Swift不会执行dispatchQueue.main.async{}
内部的代码。为什么?
这是我的代码的开头:
@IBAction func btnSave(_ sender: Any) {
DispatchQueue.global(qos: .userInitiated).async {
profondeur = Int((self.niveauRecherche.selectedItem?.title)!)!
//recupere l'URL saisie
let myURLString : String = self.textUrl.stringValue
let url = URL(string:self.textUrl.stringValue)
DispatchQueue.main.async { //this code is not executed
self.txtLog.stringValue="Veryfing first URL"
print("ok")
}
//verifie la validite de l'URL de départ
if self.checkURL(urlString: myURLString){
UserDefaults.standard.set(myURLString, forKey: "Last_URL")
//Ajoute l'URL de départ dans le tableau des URL
urlArray.append([1 as AnyObject,myURLString as AnyObject])
//recupere le nom de domaine
let domain=url?.host
let domainString:String=String(describing: domain!)
let elements = domainString.components(separatedBy: ".")
let nbElements = elements.count
switch nbElements {
case 3:
nomDeDomaine=elements[1]
default:
nomDeDomaine=elements[0]
}
能帮我吗?
谢谢!
答案 0 :(得分:0)
如果您希望按照编写的顺序执行代码,先进入后台线程,然后进入主线程,再回到后台线程,那么您就必须像这样编写代码:>
DispatchQueue.global(qos: .background).async {
// Background Thread
print("background 1")
DispatchQueue.main.async {
// Run UI Updates or call completion block
self.myLabel.text = "I have changed"
print("Main thread")
DispatchQueue.global(qos: .background).async {
print("background 2")
}
}
}
这将打印:
background 1
Main thread
background 2