OC转Swift之基础篇(五)--枚举、结构体&泛型

//枚举

enum Season:Int { //case Spring,Summer,Autumn,Winter

    case Spring=10

    case Summer

    case Autumn

    case Winter

    var tag:Int{

        return self.rawValue

    }

    static var enumName:String{

        return "\(self)"

    }

    init?(prefix:String) {

        switch prefix.lowercased() {

        case "sp":

            self = .Spring

        case "su":

            self = .Summer

        case "au":

            self = .Autumn

        case "wi":

            self = .Winter

        default:

            return nil

        }

    }

    func showMessage() {

        print("rawValue=\(self.rawValue)")

    }

    static func showEnumName(){

        print("Enum name is \"\(self)\"")

    }

}

//使用

var season = Season.Spring

        season = .Summer

        season = .Autumn

        season = .Winter

        switch season {

            case .Spring:

                print("S,\(Season.Spring.rawValue)")

            case .Summer:

                print("S")

            case .Autumn:

                print("A")

            default:

                print("W")

        }

        print(season.tag,Season.enumName) //结果:13 Season

        season.showMessage() //结果:rawValue=13

        Season.showEnumName() //结果:Enum name is "Season"

        let autumn = Season(rawValue:12)

        if let newAutumn=autumn{

            print("\(newAutumn),\(newAutumn.rawValue)"//结果:Autumn,12

        }

//结构体

struct Info {

    var firstName:String

    var lastName:String

    var fullName:String{

        return firstName+" "+lastName

    }

    

    var age:Int = 0

    func showMessage() {

        print("firstName=\(firstName),lastName=\(lastName),age=\(age)")

    }

    static func showStructName(){

        print("Struct name is \"\(self)\"")

    }

}

//使用

let info = Info.init(firstName: "Jonny", lastName: "Deng", age: 25)

        print(info.fullName//结果:Jonny Deng

        info.showMessage() //结果:firstName=Jonny,lastName=Deng,age=25

        Info.showStructName() //结果:Struct name is "Info"     

        var info2 = info

        info2.firstName = "Jenny"

        print("\(info2.fullName),\(info.fullName)"//结果:Jenny Deng,Jonny Deng

//泛型

protocol Stackable {//实现协议

    associatedtype ItemType

    mutating func push(item:ItemType)

    mutating func pop()->ItemType

}

struct Stack<T>:Stackable{

    var store:[T] = []

    mutating func push(item:T){

        store.append(item)

    }

    mutating func pop()->T{

        return store.removeLast()

    }

}

extension Stack{//进行拓展

    var top:T?{

        return store.last

    }

}

//使用

var s = Stack<Any>()

        s.push(item: "hello")

        s.push(item: "world")

        let t = s.pop()

        print("t=\(t)"//结果:t=world


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值