Como obter o botão para exibir vídeos diferentes de acordo com a linha em que ele é pressionado?

Atualmente, tenho minha configuração de código para onde, em cada célula de exibição de tabela, há um botão que exibe um vídeo depois de pressionado. Cada linha da célula da visualização da tabela contém o botão (há x quantidade de células), no entanto, independentemente da linha em que o botão é pressionado, ele sempre leva ao mesmo vídeo. Existe uma maneira de chegar até onde, dependendo da linha em que o botão está, ele exibe um vídeo? Meu código tem apenas um arquivo de vídeo no momento, mas como eu poderia chegar aonde, dependendo da célula em que o botão é pressionado, ele mostra um vídeo específico? Por exemplo, se o botão for tocado na linha um, quero que ele mostre um determinado vídeo, e o mesmo para dois, três e assim por diante. No momento, todos eles exibem o mesmo vídeo.

Aqui está o meu código para a célula de exibição de tabela:

import UIKit
import AVFoundation
import AVKit

class VideoPlayerView: UIView {

    let pauseButton: UIButton = {
        let button = UIButton(type: .system)
        button.setImage(#imageLiteral(resourceName: "Triangle 2"), for: .normal)
        button.translatesAutoresizingMaskIntoConstraints = false
        button.tintColor = UIColor.white
        button.isHidden = false
        button.addTarget(self, action: #selector(handlePause), for: .touchUpInside)

        return button
    }()

    var player: AVPlayer?
    var isPlaying = false

    func handlePause() {
        if isPlaying {
            player?.pause()
            pauseButton.alpha = 1.0 }

        else { player?.play()
            pauseButton.alpha = 0.01
        }

        isPlaying = !isPlaying
    }

    //container view that holds sublayers for the video control objects
    let controlsContainerView: UIView = {
        let view = UIView()
        view.backgroundColor = UIColor(white: 0, alpha: 1.0)
        return view
    }()

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    override init(frame: CGRect) {
        super.init(frame: frame)

        //setupPlayerView()

        //configures container view (video's background)
        controlsContainerView.frame = frame
        addSubview(controlsContainerView)
        backgroundColor = UIColor.black


        //following adds pause/play button to video
        controlsContainerView.addSubview(pauseButton)
        pauseButton.centerXAnchor.constraint(equalTo: centerXAnchor).isActive = true
        pauseButton.centerYAnchor.constraint(equalTo: centerYAnchor).isActive = true
    }

    //function that sets up video playback
    private func setupPlayerView() {

        //variable that contains video url
        let fileUrl = URL(fileURLWithPath: "/Users/jordanlagrone/Desktop/BlackHeartBB/BlackHeartBB/dunk.mov")

        player = AVPlayer(url: fileUrl)

        //video only renders if you specify 'playerLayer'
        let playerLayer = AVPlayerLayer(player: player)
        self.layer.insertSublayer(playerLayer, at: 1)
        playerLayer.frame = frame


        player?.play()


        //attached obeserver of 'player' to tell when 'player' is ready
        player?.addObserver(self, forKeyPath: "currentItem.loadedTimeRanges", options: .new, context: nil)

    }

    //method called every time you add obserever to an object
    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
        //strring that lets AVPlayer know its ready
        if keyPath == "currentItem.loadedTimeRanges" {

            //configures container view while video is playing
            controlsContainerView.backgroundColor = UIColor.clear
            pauseButton.alpha = 0.05
            isPlaying = true

        }
    }
}
class DrillsTableViewCell: UITableViewCell {

    var videoURL:[URL] = [URL(fileURLWithPath: "/Users/jordanlagrone/Desktop/BlackHeartBB/BlackHeartBB/dunk.mov"), URL(fileURLWithPath: "/Users/jordanlagrone/Desktop/BlackHeartBB/BlackHeartBB/mk.MOV")]
    var video = URL(fileURLWithPath: String())

    @IBOutlet weak var logoImage: UIImageView!
    @IBOutlet weak var drillTitle: UILabel!
    @IBOutlet weak var playButton: UIButton!

    @IBAction func watchButton(_ sender: Any) {
        print(123)

        //controls video background view
        if let keyWindow = UIApplication.shared.keyWindow {
            let view = UIView(frame: keyWindow.frame)
            view.backgroundColor = UIColor.white

            view.frame = CGRect(x: 0.0, y: 0.0, width: keyWindow.frame.width, height: keyWindow.frame.height)

            let videoPlayerFrame = CGRect(x: 0, y: 0, width: keyWindow.frame.width, height: keyWindow.frame.width * 9 / 16)
            let videoPlayerView = VideoPlayerView(frame: videoPlayerFrame)
            view.addSubview(videoPlayerView)

            keyWindow.addSubview(view)
            UIView.animate(
                withDuration: 0.5,
                delay: 0,
                options: .curveEaseOut,
                animations: {
                    view.frame = keyWindow.frame

                },
                completion: { completedAnimation in
                    //possible features implemented later
                    UIApplication.shared.isStatusBarHidden = true
                }
            )
        }
    }
}

Código para visualização de tabela:

class DrillsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    var arrayForKey2 = [[String]]()
    var keyIndex = Int()
    var headLabel = String()
    var labels = Array(trainingDict.keys)

    @IBOutlet weak var tableView: DrillsTableView!

    @IBOutlet weak var drillLabel: UILabel!

    @IBOutlet weak var labelBackground: UIView!


    @IBAction func back(_ sender: Any) {
        performSegue(withIdentifier: "back", sender: self)
    }

    public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return arrayForKey2.count
    }

    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell" , for: indexPath) as! DrillsTableViewCell
        cell.playButton.tag = indexPath.row


        //clear background color needed in order to display gradient cell
        cell.backgroundColor = UIColor.clear

        //gradient configuration
        gradient = CAGradientLayer()
        gradient.frame = tableView.bounds
        gradient.colors = [UIColor.black.cgColor, UIColor.darkGray.cgColor, UIColor.black.cgColor]
        tableView.layer.insertSublayer(gradient, at: 0)
        gradient.startPoint = CGPoint(x: 0.0, y: 0.0)
        gradient.endPoint = CGPoint(x: 1.0, y: 1.0)

        //Possible method for 'drillLabel' gradient
        drillLabel.font = UIFont(name: "Symbol", size: 24.0)

        //attributes for watch/play button

        cell.playButton.layer.shadowColor = UIColor.black.cgColor
        cell.playButton.layer.shadowOffset = CGSize(width: 2, height: 2)
        cell.playButton.layer.shadowOpacity = 0.7
        cell.playButton.layer.shadowRadius = 1

        //details for cell label display
        cell.borderWidth = 1.5
        cell.borderColor = UIColor.white
        cell.drillTitle.text = "\(arrayForKey2[keyIndex][indexPath.row])"
        cell.drillTitle.font = UIFont(name: "Symbol", size: 18.0)
        cell.drillTitle.textColor = UIColor.white

        return cell
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.delegate = self
        tableView.dataSource = self
        drillLabel.text = labels[keyIndex]
    }
}

questionAnswers(3)

yourAnswerToTheQuestion