gpt4 book ai didi

swift - 如何扩展 Dictionary 以使用 Intervals

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

我想扩展 Dictionary 以支持原生的 Interval 类型,例如 HalfOpenIntervalClosedInterval,这样我就可以做这样的事情:

var dict = [
0.0..<1.0 : "Okay",
1.0..<2.0 : "Better",
2.0..<3.0 : "Perfect"]

for (range, value) in dict {
print("\(value) is assigned to \(range)")
}

Dictionary 键类型必须符合Hashable 协议(protocol),我想我可以使用startend 属性,如果它们也 Hashable 使用代码:

public var hashValue: Int {
let halfshift = sizeof(Int)*4
return start.hashValue ^ ((end.hashValue << halfshift) | (end.hashValue >> halfshift))
}

我为实现这一目标所做的最佳尝试(完整代码):

extension IntervalType where Bound: Hashable {

public var hashValue: Int {
let halfshift = sizeof(Int)*4
return start.hashValue ^ ((end.hashValue << halfshift) | (end.hashValue >> halfshift))
}
}
extension HalfOpenInterval: Hashable where Bound: Hashable {}
extension ClosedInterval: Hashable where Bound: Hashable {}

不工作是因为错误:带有约束的“HalfOpenInterval”类型的扩展不能有继承子句

考虑到初始方法在 swift 2.2 中无法实现,还有什么我可以尝试使其接近原始用例?

最佳答案

扩展Range让它成为Hashable :

extension Range: Hashable {
public var hashValue: Int {
get {
return "\(self.startIndex)_\(self.endIndex)".hashValue
}
}
}

如果您运行的是 Swift 3 Alpha,请替换 startIndexendIndexlowerBoundupperBound .

(已编辑)在 Swift 2 中 Range<Double>不可能,但是 IntervalType可以用同样的方式扩展

extension IntervalType {

public var hashValue: Int {
return "\(self)".hashValue
}
}
extension HalfOpenInterval: Hashable {}
extension ClosedInterval: Hashable {}

关于swift - 如何扩展 Dictionary 以使用 Intervals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37617051/

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