我有一个简单的课程:
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也没有subscript members
,Elelment在列表列表中...为什么它不能编译?
答案 0 :(得分:4)
该错误消息具有误导性。只能从Set
创建Hashable
元素。 Double
确实符合Hashable
协议,因此
extension DimensionTree where Element == Double { ... }
编译。通常,您可以使用
来限制扩展名extension DimensionTree where Element: Hashable { ... }
使其编译。