元素上具有可识别约束的swift泛型序列



看起来应该很容易,但我找不到任何方法将项目序列上的泛型约束为特定的项目类型-在这种情况下,我想说我可以处理任何序列,只要组成序列的项目都是可识别的


// none of these compile
//
struct GridView<List>  : View where List: Sequence, List.Type : Identifiable
struct GridView<List, Item> : View where List: Sequence, Item: Identifiable, List.Type == Item
struct GridView<List, Item>  : View where List: Sequence, Item: Identifiable, List.Type : Item    

有什么办法吗?目前,我只需拥有一个泛型类型"就可以过得去;项目"-并采取[项目]-但理想情况下,我想使用任何序列-而不是强迫它成为一个列表。

第一个几乎是正确的。要引用Sequence的元素类型,请使用.Element,而不是.Type.Type是指一个类型的元类型。

struct GridView<ListType>: View where ListType: Sequence, ListType.Element: Identifiable
struct GridView<List: Sequence>: View where List.Element: Identifiable {
// ...
}

Sequence定义了一个名为Element的关联类型,您可以将其约束为符合Identifiable

最新更新