在Swift中扩展CoreMedia数据类型



从昨天开始,我虽然知道如何在Swift中编写扩展,但现在我不太确定。我有一个简单的扩展CMTimebase类。

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))
    }
}

在我的代码中,我是这样使用它的:

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

我想知道为什么这不起作用,因为当我做print(timebase)时,调用后的速率设置为0.0。当我调用

时,真正有趣的是:
CMTimebaseSetRate(timebase, 1.0)

则rate按预期设置为1.0。我认为这个问题不仅仅与CoreMedia有关,也可能是我不理解扩展背后的一些基本概念。请帮助如果你知道如何纠正我的分机。我试图瞄准Swift 3

好的。这是我犯的一个愚蠢的错误。我需要休息。扩展名有个错别字。它应该是rate, newValue.

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

最新更新