Swift2 Swift 2.2可移植堆栈数据结构

Swift2 Swift 2.2可移植堆栈数据结构,swift2,stack,Swift2,Stack,我需要Swift 2.2中的堆栈数据结构,即: 一般的 具有传统功能: 推 peek() 流行音乐() 此外,它还具有以下功能: 可转位 宜人的 下面的代码过去可以工作,但现在我已经升级到Swift 2.2,代码无法编译。错误消息是堆栈不符合SequenceType协议。我怀疑协议中添加了一些新的内容,这是现在需要的,以前不需要实现 // // Stack.swift // // Created by kaydell on 7/30/15. // Copyright (c) 2

我需要Swift 2.2中的堆栈数据结构,即:

  • 一般的
  • 具有传统功能:
    • peek()
    • 流行音乐()
  • 此外,它还具有以下功能:
    • 可转位
    • 宜人的
下面的代码过去可以工作,但现在我已经升级到Swift 2.2,代码无法编译。错误消息是堆栈不符合SequenceType协议。我怀疑协议中添加了一些新的内容,这是现在需要的,以前不需要实现

//
//  Stack.swift
//
//  Created by kaydell on 7/30/15.
//  Copyright (c) 2015-2016 Kaydell Leavitt. All rights reserved.
//

import Foundation

public class Stack<T>: SequenceType {

    private var values: [T] = []

    public var count: Int {
        return values.count
    }

    public subscript(i: Int) -> T {
        return values[i]
    }

    public func push(t: T) {
        values.append(t)
    }

    public func peek() -> T? {
        let lastIndex = values.count - 1
        if lastIndex <= -1 {
            return nil
        } else {
            let t = values[lastIndex]
            return t
        }
    }

    public func pop() -> T? {
        let lastIndex = values.count - 1
        if lastIndex <= -1 {
            return nil
        } else {
            let t = values.removeLast()
            return t
        }
    }

}
//
//斯威夫特先生
//
//由kaydell于2015年7月30日创建。
//版权所有(c)2015-2016 Kaydell Leavitt。版权所有。
//
进口基金会
公共类堆栈:SequenceType{
私有变量值:[T]=[]
公共变量计数:Int{
返回值.count
}
公共下标(i:Int)->T{
返回值[i]
}
公共功能推送(t:t){
附加值(t)
}
公共函数peek()->T{
让lastIndex=values.count-1
如果最后一个索引T{
让lastIndex=values.count-1

如果lastIndexSwift变化如此之快。如果你今天编写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]
    }
}
公共类堆栈:SequenceType{
公共类型别名生成器=堆栈生成器
public func generate()->Stack.Generator{
返回堆栈生成器(堆栈:自身)
}
//您的push()、pop()、peek()等。。。
}
公共类StackGenerator:GeneratorType{
公共类型别名元素=T
让堆栈:堆栈
var指数:Int
初始化(堆栈:堆栈){
self.stack=堆栈
self.index=stack.count
}
public func next()->StackGenerator.Element{
保护索引>0其他{
归零
}
索引-=1
返回self.stack[索引]
}
}
用法:

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

for value in stack {
    print(value)
}
let stack=stack()
堆栈推送(1)
堆栈推送(2)
堆栈推送(3)
对于堆栈中的值{
打印(值)
}

我们只希望代码转换器能够在Swift 3发布后自动升级到Swift 3。

Swift变化如此之快。如果你今天编写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]
    }
}
公共类堆栈:SequenceType{
公共类型别名生成器=堆栈生成器
public func generate()->Stack.Generator{
返回堆栈生成器(堆栈:自身)
}
//您的push()、pop()、peek()等。。。
}
公共类StackGenerator:GeneratorType{
公共类型别名元素=T
让堆栈:堆栈
var指数:Int
初始化(堆栈:堆栈){
self.stack=堆栈
self.index=stack.count
}
public func next()->StackGenerator.Element{
保护索引>0其他{
归零
}
索引-=1
返回self.stack[索引]
}
}
用法:

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

for value in stack {
    print(value)
}
let stack=stack()
堆栈推送(1)
堆栈推送(2)
堆栈推送(3)
对于堆栈中的值{
打印(值)
}
让我们只希望代码转换器能够自动升级到Swift 3,当它出来的时候