How to confirm an enumeration to Identifiable protocol in Swift?

When something conforms to Identifiable , it must return something that can be identified by that. So you should return something unique to that case. For String base enum, rawValue is the best option you have:

extension Data: Identifiable {
    var id: String { rawValue }
}

Also enums can usually identified by their selves:

extension Data: Identifiable {
    var id: Data { self }
}

NOTE 1: If you return something that is always unique, like UUID, this means you get a new object each time you get the object and this will kill reusability and can cause epic memory and layout process usage.

Note 2: From Swift 5.1, single line closures don't need return.

Note 3: Try not to use globally known names like Data for your own types. At least use namespace for that like MyCustomNameSpace.Data

Inline mode

You can make any collection iterable inline by one of it's element's keypath:

For example to self:

List (Data.allCases, id:\.self)

or to any other compatible keypath:

List (Data.allCases, id:\.rawValue)