类型“FileManager.SearchPathDirectory”不符合 Swift 中的协议“CaseIterable”

我想在 CaseIterable 上使用 FileManager.SearchPathDirectory

extension FileManager.SearchPathDirectory: CaseIterable {}

但我收到错误消息:“类型‘FileManager.SearchPathDirectory’不符合协议‘CaseIterable’”。

我怀疑 RawValue 是导致问题的原因。下一步我尝试用 RawValue 编写一个枚举:

struct My {
    enum Number: UInt {
        case One = 1
        case Two = 2
    }
}
extension My.Number: CaseIterable {}

for item in My.Number.allCases {
    print(item)
}

好像没问题。在第二次尝试中,我添加了协议存根:

extension FileManager.SearchPathDirectory: CaseIterable {
    public typealias AllCases = UInt
    public static var allCases: [Self] = [.adminApplicationDirectory,.allApplicationsDirectory,.desktopDirectory]
}

问题依旧。有人知道解决办法吗?

owenlixuan 回答:类型“FileManager.SearchPathDirectory”不符合 Swift 中的协议“CaseIterable”

CaseIterable 协议只要求您实现一个静态变量 allCases,其中包含该类型的所有值的集合和一个关联类型 AllCases,该类型可以表示此类型的所有值。

您实现中的问题是您的 AllCases 类型别名应该是 FileManager.SearchPathDirectory 的集合,它也可以写为 [Self] 而不是 UInt


extension FileManager.SearchPathDirectory: CaseIterable {
    public typealias AllCases = [Self]
    public static var allCases: AllCases = [.adminApplicationDirectory,.allApplicationsDirectory,.desktopDirectory]
}

for directory in FileManager.SearchPathDirectory.allCases {
    print(directory.rawValue)
}

这将打印:

4
100
12

本文链接:https://www.f2er.com/725232.html

大家都在问