我希望在可能的情况下扩展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>.

Swift相关问答推荐

同步问题,发送Api Call之前未设置idToken

纹理资源加载问题(图像解码失败)

Variadic泛型与Swift中的值和类型参数包

SwiftUI同心圆,通过逐渐出现来显示进度

字典下标或运算符,如果密钥不存在,则添加指定的默认&值是SWIFT?

如何使用变量 Select 哪个向量(?)在我的 struct 中密谋吗?

在不传递参数的情况下使用Init方法?

如何使用Duration.TimeFormatStyle以h m s格式快速格式化时间

当将新值推送到 NavigationStack 时,SwiftUI 的 navigationDestination 已在堆栈的早期声明

在 RealityKit 中查找特定模型的 findEntity(named:) 方法的替代方法?

仅当 boolean 为真时才实现方法(application:didReceiveRemoteNotification)

使第二个视图变灰 SwiftUI

如何修改下面的代码,使图像 Select 的顺序与使用快速并发的图像呈现的顺序相匹配?

在 SwiftUI 中的 ForEach 中使用 id 时如何为数组设置动画索引

iOS SwiftUI - 无法转换 ObservedObject 类型的值

如何有条件地依赖桌面与 iOS 的系统库?

如何在 SwiftUI 中打开 ImagePicker?

在 Swift 中为 UIPickerView 设置默认值?

来自 ObservableObject 的绑定值

Switch 语句中的字符串:String不符合协议IntervalType