我用swift编写了一个简单的队列类。它是由一个数组实现的。现在我希望它的性能更像内置数组。所以我需要实现[]
运算符,但失败了。有人帮忙吗?
public class SimpleQueue<T : Any>
{
private var frontCur = 0
private var reuseCur = -1
private var capacity = 0
private var impl = [T]()
public var count : Int
{
get
{
return impl.count - frontCur
}
}
public func empty() -> Bool
{
return self.count == 0
}
public func size() -> Int
{
return impl.count
}
public func append(o : T)
{
if(frontCur > reuseCur && reuseCur >= 0)
{
impl[reuseCur] = o
reuseCur++
}
else
{
impl.append(o)
}
}
public func pop()
{
frontCur++
}
public func front() -> T
{
return impl[frontCur]
}
public postfix func [](index:Int) -> T //Error!!!!
{
return impl[index + frontCur]
}
}
var x = SimpleQueue<Int>()
for index in 1...10{
x.append(index)
}
print(x.count)
for index in 1...3{
x.pop()
}
print(x.count,x.front(),x[2]) // x[2] Error!!!
苹果文档
订阅使您能够通过编写一个或实例名称后面方括号中的更多值。它们的语法与实例方法语法和计算属性都相似语法。使用subscript关键字编写下标定义,并在中指定一个或多个输入参数和返回类型与实例方法相同。
下标不是运算符。只是一个用subscript
关键字标记的方法。
subscript (index:Int) -> T {
return impl[index + frontCur]
}
阅读:
class MyColl {
private var someColl : [String] = []
subscript(index: Int) -> String {
get {
return someColl[index]
}
set(value) {
someColl[index] = value
}
}
}
阅读以下内容:
Swift拥有一套精心设计、功能强大的内置收藏类型。除了Array、Dictionary和全新的Set类型之外,标准库还提供切片、延迟集合、重复序列等,所有这些都具有一致的操作接口和语法。一组内置的收集协议——SequenceType、CollectionType和其他几个协议——就像梯子上的台阶一样。随着每一步的提升,集合类型在语言和标准库中都会获得更多的功能。