Как из Observer получить доступ к каждому индексу ringNode в цикле?

При нажатии на кнопку срабатывает flagObservation, он должен сделать removeAllAction для каждой ringNode в цикле в том положении в котором они двигались, без пересоздания движения заново. Проблема что observe не в курсе какой именно ringNode.removeAllActions() остановить. Вопрос: Как получить доступ из observe для каждого ringNode в цикле?

import ARKit 
import SceneKit 
import UIKit

final class arViewController: NibViewController<arContentView>{

 @objc let taylor = Motion()
 var flagObservation: NSKeyValueObservation?

 func createAndMove(){
         switch CreateSomeThihgs{
    case .first, .second:
         for index in 0..<Array.count {
          ...
          let ringNode = SCNNode(geometry: geometry)
          ...
          ringNode.runAction(SCNAction.repeatForever(...) //Запускаем движение
          flagObserve = observe(\arViewController.taylor.flag, options:[.new]) { (vc, change) in
            ringNode.removeAllActions()   //Удаляем движение } 

          }

       }

    @IBAction func pushPauseButton(_ sender: Any) {
        taylor.flag = 1
    }    
}


class Motion: NSObject{
    @objc dynamic var flag = Int() }

Ответы (1 шт):

Автор решения: lera

Решение: ringNode записать в массив:

 let ringNodes = [SCNNode]() 

Наблюдателя вынести из цикла, и запустить цикл внутри наблюдателя для каждого ringNode:

flagObservation = observe(\arViewController.taylor.flag, options: [.new]) { (vc, change) in 

  for index in 0..<ringNodes.count { 

    let ringNode = ringNodes[index] 

    ringNode.removeAllActions() 

  }
}

(Спасибо Васе Я. за подсказку)

→ Ссылка