簡體   English   中英

強制執行順序-Swift3 / Xcode8-線程

[英]Force execution order - Swift3/Xcode8 - Threads

我是新手,本周我遇到了一個問題,已經使我拔掉頭發了!
接下來發生的事情是,在我的應用程序中將其划分為幾個類,以使我的代碼更“干凈”。在這一波中,我決定按項目將一些函數划分為多個類,但到目前為止還不錯。
問題是Swift如何處理執行隊列,而留下了ViewController之外的所有內容,這阻礙了我。
我將向您展示一些代碼,以便您可以更好地擴展我在說的內容。
我的ViewController按鈕的功能:

@IBAction func btnLogin(_ sender: UIButton) {

  //The line that the Swift "skips"
  let dadosAlunoWS = FadbaWS.buscaAluno(matricula: MatriculaTbox.text!, senha: SenhaTbox.text!, token: "TOKEN")  

  //'dadosAlunoWS' aways empty because 'FadbaWS.buscaAluno' 
  //is only performed at the end of 'btnLogin'

  if dadosAlunoWS.sucesso && dadosAlunoWS.usuarioEncontrado{
      print(dadosAlunoWS.name)

  }else{ 

      //Error on request
  }        
}

我知道並行性和並發性的概念,並且通過研究,我能夠意識到對接口進行優先級排序是Swift的本機,這使一切變得流暢,但是我的問題是我的'FadbaWS.buscaAluno'函數從未執行過,因此永遠不會返回有效值。
如何賦予優先級,以便我的代碼僅在執行此功能后才能繼續執行?
如何在Swift中處理DispatchQueue?
現在,感激不盡!

您可以在此處查看如何使用DispatchQueue: 如何在Swift 3中編寫GCD的dispatch_after?

但是最好重寫FadbaWS.buscaAluno()來傳遞一個處理程序,該處理程序在就緒時可以執行,請參見: 如何在Swift中使用完成處理程序創建函數?

FadbaWS.buscaAluno在哪個線程上運行? 有沒有完成處理程序?

您提到FadbaWS.buscaAluno在函數結尾處實現。 這可能意味着它正在mainQueue上異步運行。 如果是這種情況,那么您可以通過在主隊列上異步調度其他任務來簡單地執行它們。

DispatchQueue.main.async {
if dadosAlunoWS.sucesso && dadosAlunoWS.usuarioEncontrado{
      print(dadosAlunoWS.name)

  }else{ 

      //Error on request
  }    
}

這將起作用,因為mainQueue本質上是一個串行隊列,並且這里我們在主隊列上串行分配任務。 雖然可以,但是如果可以在FadbaWS.buscaAluno方法上實現完成處理程序, FadbaWS.buscaAluno更好了。

正如一些人在這里評論的那樣,使用CompletionHandler是解決方案

       self.FadbaWS.buscaAluno(matricula: MatriculaTbox.text!, senha: SenhaTbox.text!, token: "TOKEN", complete:{ resultado in

          if resultado.2 && resultado.3{
            print(resultado.0)
          }else 
            //Error on request
          }
       })

在這種情況下,我需要一些參數,所以我這樣做了。 它有效,但我不知道它是否正確

我的“ buscaAluno”功能:

    func buscaAluno(matricula: String, senha: String, token: String, complete: @escaping (_ nome: String?, _ login: String?, _ sucesso:Bool, _ userok:Bool) -> Void) {

       complete("Wender", "1234", true, true)

      }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM