Swift 2.2可迭代堆栈数据结构

时间:2016-06-10 01:57:17

标签: swift2 stack

我需要在Swift 2.2中使用Stack数据结构:

  • 通用
  • 具有传统功能:
    • 推()
    • PEEK()
    • pop()方法
  • 此外还具有以下功能:
    • 可转位
    • 可迭代

以下代码用于工作,但现在我已升级到Swift 2.2,代码无法编译。错误消息是Stack不符合SequenceType协议。我怀疑协议中添加了一些新的东西,现在不需要在之前实现。

try:
    import yourModule
except ImportError:
    # Do installation process here
    # pip install module ...

我似乎无法从SequenceType协议中弄清楚我需要实现什么,以便编译我的代码。

我喜欢Eclipse,用Java编程。如果Java接口需要实现方法,Eclipse会告诉您需要实现哪些方法,甚至可以根据请求为您编写这些方法的存根。

我正在使用Xcode 7.3.1

Swift 2.2是否具有Stack数据类型的API?或者,有人可以帮我修复我的代码,以便再次运行吗?

1 个答案:

答案 0 :(得分:2)

斯威夫特变化如此之快。如果你今天编写Swift 2代码,那么在Swift 3发布后的几个月内它就会过时。无论如何,这里是你如何在Swift 2中做到的。

public class Stack<T>: SequenceType {
    public typealias Generator = StackGenerator<T>

    public func generate() -> Stack.Generator {
        return StackGenerator(stack: self)
    }

    // your push(), pop(), peek(), etc...
}

public class StackGenerator<T>: GeneratorType {
    public typealias Element = T

    let stack: Stack<T>
    var index: Int

    init(stack: Stack<T>) {
        self.stack = stack
        self.index = stack.count
    }

    public func next() -> StackGenerator.Element? {
        guard index > 0 else {
            return nil
        }
        index -= 1
        return self.stack[index]
    }
}

用法:

let stack = Stack<Int>()
stack.push(1)
stack.push(2)
stack.push(3)

for value in stack {
    print(value)
}

让我们只希望代码转换器可以自动升级到Swift 3。