Je n'arrive pas à comprendre comment fonctionnent les files d'attente de répartition ou les gestionnaires de tâches dans swift 3. Mon problème spécifique est le suivant: je rencontre des problèmes de performances et souhaite exécuter plusieurs blocs de codez en parallèle et attendez pour quitter la fonction jusqu'à ce que tous les blocs se terminent. J'ai essayé d'exécuter simplement les blocs de manière asynchrone en arrière-plan, mais ensuite j'essaie d'utiliser xxx pendant qu'il est en train de muter parce que j'énumère sur les mêmes tableaux ou enumerateChildNodes (...) étant gérés sur les files d'attente asynchrones. J'essaie de gérer la minimisation des nœuds SpriteKit pour améliorer les fps. Voici un exemple des blocs de code que je veux courir en parallèle et les attendre:Exécution simultanée de blocs de code dans Swift 3 Fonction suivie d'attente d'achèvement
func determinePlatformNodesToUse() {
// Code Block 1:
for platform in platformArray {
addPlatformNode(platform, leftDistance: leftDistance, rightDistance: rightDistance)
}
// Also part of Code Block 1:
// resort the platform nodes to guarantee position sequence
currentPlatformNodeArray.sort(by: { $0.position.x < $1.position.x })
// Code Block 2:
for character in characterArray {
if character.type == CharacterType.Enemy {
addCharacterNode(character, leftDistance: leftDistance, rightDistance: rightDistance)
}
}
// Code block 3
// put all the enemies into an array for update processing will be added in addCharacterNode
currentMotionEnemyNodeArray.removeAll()
// Also part of Code block 3
foregroundNode.enumerateChildNodes(withName: CharacterType.Enemy.rawValue, using: {
(node, stop) in
if let enemy = node as? CharacterNode {
if enemy.motionType != .Stand { // dont use .Stand as they dont have motion
self.currentMotionEnemyNodeArray.append(enemy)
}
}
})
// Code Block 4
for actionSceneObject in actionSceneObjectArray {
addActionSceneObjectNode(actionSceneObject, leftDistance: leftDistance, rightDistance: rightDistance)
}
// At this point, wait until all blocks 1-4 above have finished
// Run blocks 5 - 8 code in all in parallel
// wait until blocks 5 - 8 have finished and then leave the function
}
Salut, s'il vous plaît laissez-moi savoir si votre problème est résolu – KrishnaCA