Using .indices() is not a workaround, it is a proper way of doing it.
Alternatively, you can also use the code in the release notes for an indexed() array:
struct ContentView: View {
    var persons = ["Boris", "Anna", "Tom"]
    var body: some View {
        VStack {
            List(persons.indexed(), id: \.1.self) { idx, person in
                Text("\(idx) - \(person)")
            }
        }
    }
}
// This is taken from the Release Notes, with a typo correction, marked below
struct IndexedCollection<Base: RandomAccessCollection>: RandomAccessCollection {
    typealias Index = Base.Index
    typealias Element = (index: Index, element: Base.Element)
    let base: Base
    var startIndex: Index { base.startIndex }
   // corrected typo: base.endIndex, instead of base.startIndex
    var endIndex: Index { base.endIndex }
    func index(after i: Index) -> Index {
        base.index(after: i)
    }
    func index(before i: Index) -> Index {
        base.index(before: i)
    }
    func index(_ i: Index, offsetBy distance: Int) -> Index {
        base.index(i, offsetBy: distance)
    }
    subscript(position: Index) -> Element {
        (index: position, element: base[position])
    }
}
extension RandomAccessCollection {
    func indexed() -> IndexedCollection<Self> {
        IndexedCollection(base: self)
    }
}