gpt4 book ai didi

swift - 为什么泛型元素在定义为 Double 时表现不同?

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

我有一个简单的类:

class DimensionTree<Element> {

var spot:Element
var nextDim: [DimensionTree<Element>]

init(_ spot:Element, _ nextDim: [DimensionTree<Element>] = [] ) {
self.spot = spot
self.nextDim = nextDim
}
}

然后我尝试在扩展中添加类函数:

extension DimensionTree {
class func makeTreeFrom(_ spots:[[Element]], from level:Int = 0) -> [DimensionTree <Element>]{
if spots.count > 0, spots[0].count > 0 {
var trees :[DimensionTree<Element>] = []
let axisSpots = Set(spots.map { $0[0] })
// Here I got an error: "Type 'Element' has no subscript members"
//... some code
return trees
}
return []
}
}

我得到一个错误 “Type 'Element' has no subscript members”。但是如果我分配 Element == Double:

extension DimensionTree where Element == Double

扩展编译和工作没有问题。 Double 也没有下标成员,Elelment 在lists of lists 里面...为什么编译不了?

最佳答案

错误信息具有误导性。 Set 只能从 Hashable 创建元素。 Double 确实符合 Hashable 协议(protocol),这就是为什么

extension DimensionTree where Element == Double { ... }

编译。通常,您可以使用

来限制扩展
extension DimensionTree where Element: Hashable { ... }

让它编译。<​​/p>

关于swift - 为什么泛型元素在定义为 Double 时表现不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53301614/

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