如何确定延伸中的混凝土类型



我想在可能的情况下扩展Array,将数组转换为集合。以下扩展可以做到这一点,但在调试器控制台中,集合的元素被显式标记为AnyHashable。为什么会这样?但更重要的是,是否有一种方法可以确定扩展中元素(即String(的具体类型,从而返回类型匹配集?

extension Array where Element: Hashable {
var asSet: Set<AnyHashable> {
return Set(self)
}
}
let someArray: [String] = ["kiwi", "mango", "mango"]
print(someArray.asSet) // actual output:  [AnyHashable("kiwi"), AnyHashable("mango")]
// desired output: ["kiwi", "mango"]

您可以避免AnyHashable,并返回一组泛型类型:

var asSet: Set<Element> {
return Set(self)
}

在您的示例中,这将返回一个Set<String>

最新更新