如何在swift中实现自定义operator []

时间:2015-12-08 06:37:03

标签: swift custom-operator

我在swift中编写了一个简单的队列类。它由Array实现。 现在我希望这个执行更像内置数组。所以我需要实现[]运算符但是失败了。有人帮忙吗?

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!!!

1 个答案:

答案 0 :(得分:3)

apple docs

  

下标使您能够通过编写一个或多个来查询类型的实例   实例名称后方括号中的更多值。他们的语法   类似于实例方法语法和计算属性   句法。您使用subscript关键字编写下标定义,   并指定一个或多个输入参数和一个返回类型   与实例方法相同。

下标不是运营商。只是标有subscript关键字的方法。

subscript (index:Int) -> T {
    return impl[index + frontCur]
}

Read this:

class MyColl {

    private var someColl : [String] = []

    subscript(index: Int) -> String {
        get {
            return someColl[index]
        }
        set(value) {
            someColl[index] = value
        }
    }
}

And read this:

  

Swift拥有精心设计和扩展的内置集合类型套件。除了数组,字典和全新的Set类型之外,标准库还提供切片,延迟集合,重复序列等,所有这些都具有一致的操作界面和语法。一组内置的集合协议 - SequenceType,CollectionType和其他几个 - 就像梯子上的步骤一样。随着每一步的进行,集合类型在语言和标准库中获得更多功能。