Swift中AVPlayerItem如何比较?官方示例代码疑问
关于AVPlayerItem能用
==比较的解释 首先你要知道,AVPlayerItem是继承自NSObject的,而NSObject类本身就自带了isEqual(_:)和hash方法,这就是它能支持==比较的核心原因。
在Swift里,对于继承自NSObject的类,使用==运算符时,底层会自动调用NSObject的isEqual(_:)方法——如果子类没有重写这个方法,默认实现就是和===效果一致:比较对象的内存地址,判断是不是同一个实例。
回到你贴的这段代码:
guard let currentIndex = playerItems.firstIndex(where: { $0 == currentItem }) else { return }
这里的$0 == currentItem,本质上是在检查数组里的AVPlayerItem实例和currentItem是不是同一个对象。苹果官方示例这么写,是因为playerItems数组里的元素就是当前播放器正在管理的实例,用引用比较就能准确找到对应元素的索引。
至于你没找到AVPlayerItem重写isEqual()或hash()的公开文档,这很正常——苹果很多框架类的内部实现不会完全公开,但只要它继承自NSObject,就肯定有这两个方法的实现(要么用父类默认逻辑,要么内部重写了)。
内容的提问来源于stack exchange,提问作者plantstoen
相关产品推荐
相关产品推荐

