Je fais un travail de communication sur un fil d'arrière-plan, que je commence comme ceci:Aviser principal thread d'interface utilisateur du fil d'arrière-plan Swift 4
self.thread = Thread(target: self, selector: #selector(threadMain), object: nil)
self.thread?.start()
...
func threadMain() {
...
}
threadMain est invoqué correctement et le traitement roule comme il se doit. La dernière séquence de code sur threadMain est la notification du fil principal par lequel je voulais rappel externe fourni « onComplete », à faire comme ceci:
print("leaving thread")
DispatchQueue.main.async {
self.onComplete?(CommunicationCallbackParams(errorCode:
self.errorCode, commState: self.commState, redirectUrl: self.redirectUrl))
}
Cependant, le code de la fermeture est jamais appelé. Si je supprime l'enveloppe "DispatchQueue.main.async" cela fonctionne, mais je préviens sur le niveau de thread non-UI. Qu'est-ce qui pourrait mal tourner ici?
Le même principe fonctionne très bien dans l'objectif C ...
Affiche la définition de la propriété 'onComplete'. –
private var onComplete: ((CommunicationCallbackParams) ->())? – decades
Et il est défini à partir du constructeur de la classe requise init (url Theurl: String, onComplete: @escaping ((CommunicationCallbackParams) ->())) { \t \t self.url = Theurl \t \t self.onComplete = onComplete \t \t \t \t super.init() \t \t \t \t self.thread = filetage (cible: self, sélecteur: #selector (threadMain), objet: néant) \t \t self.thread .start (?) \t} – decades