gpt4 book ai didi

generics - 什么时候在 Swift 中使用类型约束?

转载 作者:搜寻专家 更新时间:2023-11-01 06:47:56 25 4
gpt4 key购买 nike

Swift 文档说协议(protocol)被视为与任何其他类型一样,但查看一些示例,我看到正在使用“类型约束”构造而不是协议(protocol)。

我们以Swift字典为例:

struct Dictionary<Key: Hashable, Value>: CollectionType, DictionaryLiteralConvertible {
// ...
subscript (key: Key) -> Value?
// ...
}

难道不能这样写吗

struct Dictionary<Value>: CollectionType, DictionaryLiteralConvertible {
// ...
subscript (key: Hashable) -> Value?
// ...
}

?

我可以看到类型约束对于具有关联类型的类型的 where 条件很有用,但我不确定这个具体示例。

最佳答案

如果您尝试实现类似于第二个示例的内容,编译器会提示 Protocol 'Hashable' can only be used as a generic constraint because it has Self or associated type requirements。这是因为 Hashable 最终扩展了 Equatable,它要求相等语句的左侧和右侧都是完全相同的类型 作为彼此。但是,在您的第二个示例中,您只是要求字典键是 Hashable,而不是所有键都是相同的具体类型。看看this answer以获得更全面的解释。

关于generics - 什么时候在 Swift 中使用类型约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27945722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com