这是我的代码:
init<T: RandomAccessCollection>(
items: T,
build: @escaping (T.Element) -> any View
) where T.Element : Hashable {
self.items = AnyRandomAccessCollection(items.map({ AnyHashable($0) }))
self.itemBuild = // erase T.Element to AnyHashable to obtain a closure of type (AnyHashable) -> any View
}
private let itemBuild: (AnyHashable) -> any View
我想将 init 中的构建闭包分配给 itemBuild 参数,因为我需要以某种方式将可哈希的擦除 T.Element 键入 AnyHashable。
新增打字擦除功能。还没有真正尝试过太多值得一提的事情。
我已经弄清楚了。如果有人想知道同样的事情,我就是这样做的:
init<T: RandomAccessCollection>(
items: T,
build: @escaping (T.Element) -> any View
) where T.Element : Hashable {
self.items = AnyRandomAccessCollection(items.map({ AnyHashable($0) }))
let erasedType: (any Hashable) -> any View = { item in
build(item as! T.Element)
}
self.itemBuild = erasedType
}