我正在试验下标和泛型,我想要做的是:
heap[0]!.hasLeftChild
我的堆类看起来像这样:
public class Heap<T> where T:HeapSubscriptable {
private var size = Int()
private var valueList = [T]()
public var capacity = 3
// subscript setter
subscript(i: Int) -> T? {
if i < self.size {
return valueList[i]
} else {
return nil
}
}
...
}
为了允许这个我做了一个协议扩展:
public protocol HeapSubscriptable {
var hasLeftChild: Bool{ get }
}
extension HeapSubscriptable {
public var hasLeftChild: Bool {
// return (self.size > 1+i*2 ) // <-- I want to get a hold of this i
}
}
extension Int : HeapSubscriptable{}
但是为了计算这个,我需要访问下标参数i,这样我就可以在我的数组中使用它的索引并在其上做魔术,看看它是否真的有一个左子。是否可以访问它?