You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Array扩展中确定元素具体类型并返回匹配类型的Set?

问题解答

为什么会显示AnyHashable?

你当前的扩展里把asSet的返回类型硬指定成了Set<AnyHashable>,即便原数组元素是具体类型(比如String),返回的Set也会被强制向上转为AnyHashable类型,所以控制台输出时每个元素都会被AnyHashable包裹显示。

如何返回类型匹配的Set?

只需要把返回类型改成Set<Element>即可——因为扩展已经通过where Element: Hashable约束了元素必须遵循Hashable协议,完全满足Set对元素的类型要求。修改后的代码如下:

extension Array where Element: Hashable {
    var asSet: Set<Element> {
        return Set(self)
    }
}

let someArray: [String] = ["kiwi", "mango", "mango"]

print(someArray.asSet) // 输出: ["kiwi", "mango"]

修改后,someArray.asSet的类型会自动推断为Set<String>,控制台输出时会直接显示元素本身,不会再有AnyHashable的包裹。

额外补充:其实直接调用Set(someArray)就能得到类型匹配的Set,这个扩展的作用只是提供更简洁的语法糖,调整返回类型后就能完美实现你的需求。

内容的提问来源于stack exchange,提问作者lurning too koad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 12:03:35