2016-11-04 1 views
0

Depuis hier, même si je comprends comment écrire des extensions dans Swift, mais maintenant je ne suis pas vraiment sûr. J'ai une extension simple pour la classe CMTimebase.Extension dans Swift avec les types de données CoreMedia

extension CMTimebase { 

    class func instance(withMasterClock masterClock: CMClock) -> CMTimebase { 
     var timebase: CMTimebase? = nil 
     CMTimebaseCreateWithMasterClock(kCFAllocatorDefault, masterClock, &timebase) 
     return timebase! 
    } 

    var rate: Float64 { 
     set { 
      CMTimebaseSetRate(self, rate) 
      print(self) 
     } 
     get { 
      return CMTimebaseGetRate(self) 
     } 
    } 

    var seconds: Float64 { 
     return CMTimeGetSeconds(CMTimebaseGetTime(self)) 
    } 

} 

Dans mon code je l'utilise comme ça:

let timebase = CMTimebase.instance(withMasterClock:captureSession.masterClock) 
timebase.rate = 1.0 

Et je me demande pourquoi cela ne fonctionne pas parce que quand je fais l'impression (base de temps) le taux est fixé à 0,0 après appel. Ce qui est vraiment drôle quand j'appelle:

CMTimebaseSetRate(timebase, 1.0) 

Puis le taux est fixé à 1.0 comme prévu. Je pense que le problème n'est pas lié uniquement à CoreMedia ou peut-être que je ne comprends pas certains concepts fondamentaux derrière l'extension. S'il vous plaît, aidez si vous savez comment corriger mon extension. J'essaie de cibler Swift 3.

Répondre

1

Ok. C'est vraiment une erreur stupide de mon côté. J'ai besoin de pause. Il y a une faute de frappe en extension. Il devrait être au lieu de rate, newValue.

var rate: Float64 { 
    set { 
     // CMTimebaseSetRate(self, rate) 
     // Line below is correct 
     CMTimebaseSetRate(self, newValue) 
    } 
    get { 
     return CMTimebaseGetRate(self) 
    } 
}