             ratio = secondsElapsed / duratoinInSeconds
             updateDurationLabelWithTime(time: duratoinInSeconds)
         }
-        self.slider?.value = Float(ratio)
+        self.slider.value = Float(ratio)
         updateCurrentTimeLabelWithTime(time: secondsElapsed)
         updateRemainingTimeLabelWithTime(time: duratoinInSeconds - secondsElapsed)
-        
-        //TODO: playerScrubbingDidUpdateTime delegate// may be not needed
     }
     
     fileprivate func updatePlayer(playIfNeeded: Bool) {
         let duratoinInSeconds = CMTimeGetSeconds((self.player.currentItem?.duration)!)
-        let seconds = Float64(duratoinInSeconds) * Float64((self.slider?.value)!)
+        let seconds = Float64(duratoinInSeconds) * Float64((self.slider.value))
         let time = CMTimeMakeWithSeconds(seconds, Int32(NSEC_PER_SEC))
         self.player.seek(to: time, toleranceBefore: kCMTimeZero, toleranceAfter: kCMTimeZero, completionHandler: { (done: Bool) -> Void in
-            if playIfNeeded && Float((self.slider?.value)!) < Float((self.slider?.maximumValue)!) {
+            if playIfNeeded && Float(self.slider.value) < Float(self.slider.maximumValue) {
                 if self.playAfterDrag {
                     self.player.play()
                 }

        updatePlayer(playIfNeeded: touch?.phase == .ended)
    }
    
    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
        if CMTIME_IS_VALID((self.player.currentItem?.duration)!) && !CMTIME_IS_INDEFINITE((self.player.currentItem?.duration)!) {
            self.player.currentItem?.removeObserver(self, forKeyPath: SHVideoPlayerConstants.ObserverKey.duration)

    
    fileprivate func updateCurrentTimeLabelWithTime(time: TimeInterval) {
        if self.currentTimeLabel == nil { return }
        self.currentTimeLabel.text = timecodeForTimeInterval(time: time)
    }
    
    fileprivate func updateDurationLabelWithTime(time: TimeInterval) {
        if self.durationLabel == nil { return }
        self.durationLabel.text = timecodeForTimeInterval(time: time)
    }
    
    fileprivate func updateRemainingTimeLabelWithTime(time: TimeInterval) {
        if self.remainingTimeLabel == nil { return }
        self.remainingTimeLabel.text = timecodeForTimeInterval(time: time)
    }
    
    fileprivate func timecodeForTimeInterval(time: TimeInterval) -> String {
