有什么方法可以在 Swift 中只输入擦除闭包的参数吗?

问题描述 投票:0回答:1

这是我的代码:

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。

新增打字擦除功能。还没有真正尝试过太多值得一提的事情。

swift generics type-erasure
1个回答
0
投票

我已经弄清楚了。如果有人想知道同样的事情,我就是这样做的:

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
    }
© www.soinside.com 2019 - 2024. All rights reserved.