zoukankan      html  css  js  c++  java
  • Swift学习4---枚举和结构体

    1.枚举

      使用enum创建枚举——注意Swift的枚举可以关联方法:

    enum Rank: Int {
        case Ace = 1
        case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten
        case Jack, Queen, King
        func simpleDescription() -> String {
            switch self {
            case .Ace:
                return "ace"
            case .Jack:
                return "jack"
            case .Queen:
                return "queen"
            case .King:
                return "king"
            default:
                return String(self.rawValue)
            }
        }
    }

    let ace = Rank.Ace

    let aceRawValue = ace.rawValue

      使用rawValue在原始(raw)数值和枚举值之间进行转换:

    if let convertedRank = Rank(rawValue: 3) {
        let threeDescription = convertedRank.simpleDescription()
    }

      注意枚举中的成员值(member value)是实际的值(actual value),和原始值(raw value)没有必然关联。

      枚举的成员值是实际值,并不是原始值的另一种表达方法。实际上,如果原始值没有意义, 你不需要设置 

    enum Suit {
        case Spades, Hearts, Diamonds, Clubs
        func simpleDescription() -> String {
            switch self {
            case .Spades:
                return "spades"
            case .Hearts:
                return "hearts"
            case .Diamonds:
                return "diamonds"
            case .Clubs:
                return "clubs"
            }
        }
    }
    let hearts = Suit.Hearts
    let heartsDescription = hearts.simpleDescription()

      除了可以关联方法,枚举还支持在其成员上关联值,同一枚举的不同成员可以有不同的关联的值:

    enum ServerResponse {
        case Result(String, String)
        case Error(String)
    }
    
    let success = ServerResponse.Result("6:00 am", "8:09 pm")
    let failure = ServerResponse.Error("Out of cheese.")
    
    switch success {
        case let .Result(sunrise, sunset):
            let serverResponse = "Sunrise is at (sunrise) and sunset is at (sunset)."
        case let .Error(error):
            let serverResponse = "Failure... (error)"
    }

    2.结构体

      Swift使用struct关键字创建结构体。结构体支持构造器和方法这些类的特性。结构体和类的最大区别在于:结构的实例按值传递(passed by value),而类的实例按引用传递(passed by reference)。

    struct Card {
        var rank: Rank
        var suit: Suit
        func simpleDescription() -> String {
            return "The (rank.simpleDescription()) of (suit.simpleDescription())"
        }
    }
    let threeOfSpades = Card(rank: .Three, suit: .Spades)
    let threeOfSpadesDescription = threeOfSpades.simpleDescription()
  • 相关阅读:
    MINIBASE源代码阅读笔记之heapfile
    MINIBASE源代码阅读笔记之HFPage
    naive cube implementation in python
    C++中对已分配空间的指针调用一个类的构造函数
    作死自救日记——不小心修改linux下/etc/sudoers权限的解决办法
    TPC-H数据导入MySQL教程
    TeX Live & TeXstudio 安装手记
    Web开发入门知识小总结
    配置静态服务器和配置nfs
    数论们
  • 原文地址:https://www.cnblogs.com/ShawnLi/p/4502172.html
Copyright © 2011-2022 走看看