phasset 子类型 rawValue 意味着 swift

Posted

技术标签:

【中文标题】phasset 子类型 rawValue 意味着 swift【英文标题】:phasset subtypes rawValue meaning swift 【发布时间】:2018-08-08 08:39:42 【问题描述】:

我正在尝试检测 PHAsset 的子类型。

asset.subtypes.rawvalue -> UInt

我找到了子类型 .video (rawValue: 0) 和 photoLive (rawValue: 8) 的含义,但我有带有 HDR 选项的 livePhoto,子类型 rawavlue 是 10,我找不到值的含义。 有人拥有 PHAsset 子类型的所有 rawValue 含义吗? 谢谢

【问题讨论】:

“媒体子类型是位掩码值,因此您可以使用按位运算符组合它们以测试多个子类型。” (来源:developer.apple.com/documentation/photokit/…)。所以 rawValue = 10 是 2+8,所以它既是 value = 2 的子类型,又是 photoLive(其值为 8)。 @Larme 谢谢你的回答! 【参考方案1】:

根据documentation of PHAssetMediaSubtype

媒体子类型是位掩码值,因此您可以使用 用于测试多个子类型的位运算符。

该定义有助于:

typedef enum PHAssetMediaSubtype : NSUInteger 
    PHAssetMediaSubtypeNone = 0,
    PHAssetMediaSubtypePhotoPanorama = (1UL << 0),
    PHAssetMediaSubtypePhotoHDR = (1UL << 1),
    PHAssetMediaSubtypePhotoScreenshot = (1UL << 2),
    PHAssetMediaSubtypePhotoLive = (1UL << 3),
    PHAssetMediaSubtypePhotoDepthEffect = (1UL << 4),
    PHAssetMediaSubtypeVideoStreamed = (1UL << 16),
    PHAssetMediaSubtypeVideoHighFrameRate = (1UL << 17),
    PHAssetMediaSubtypeVideoTimelapse = (1UL << 18)
 PHAssetMediaSubtype;

所以,如果子类型是 10,那么 10 就是 8+2(这是唯一可能的“子值”),它是值 8 (.photoLive) 和值 2 (.HDR)。

【讨论】:

感谢 Larme,这正是我所寻找的!

以上是关于phasset 子类型 rawValue 意味着 swift的主要内容,如果未能解决你的问题,请参考以下文章

无法将类型“[PHAsset]”的值分配给类型“UIImageView!”

使用Swift枚举作为视图标记号而不使用rawValue

如何正确检测 PHAsset 的文件类型 (GIF)

如何从 PHAsset 获取原始图像和媒体类型?

Swift - 条件绑定的初始化程序必须具有可选类型,而不是 'PHFetchResult<PHAsset>'

如何将 PHAsset 存储到核心数据中