¿Por qué un "timer programado" se dispara correctamente cuando se configura fuera de un bloque, pero no dentro de un bloque?

El siguiente fragmento de código funciona perfectamente cuando se llama fuera de un bloque de finalización, pero el temporizador nunca se activa cuando lo configuro dentro del bloque. No entiendo por qué hay una diferencia:

self.timer = Timer.scheduledTimer(timeInterval: 1,
                                  target: self,
                                  selector: #selector(self.foo),
                                  userInfo: nil,
                                  repeats: true)

No estaba usando las autorreferencias cuando lo llamé inicialmente fuera del bloque, pero luego, una vez dentro, fue necesario. Sin embargo, probé exactamente el mismo código fuera del bloque nuevamente y todavía funciona.

El bloque es un controlador de finalización que se llama después de pedir permiso paraHealthKit información relacionada.

Respuestas a la pregunta(3)

Su respuesta a la pregunta