• Swift和Java在枚举方面的比较


    1. 在Swift和Java关于枚举方面,两个语言语法相似。

    Swift定义枚举:

    enum CompassPoint{
                case Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
            }

    Java定义枚举:

    public enum ColorSelect {
            red, green, yellow, blue;    
        }

    2. 枚举和switch结合使用

    Swift代码如下:

    enum CompassPoint{
                case Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
            }
            let directionToHead = CompassPoint.Venus
            switch directionToHead {
            case CompassPoint.Earth :
                print("this is (directionToHead)")
            case CompassPoint.Venus :
                print("this is (directionToHead)")
            case CompassPoint.Mercury :
                print("this is (directionToHead)")
            case CompassPoint.Jupiter :
                print("this is (directionToHead)")
            }

    2.1 switch的 case 分支代码中提取每个相关值作为一个常量(用let前缀)或者作为一个变量(用var前缀)来使用:代码如下:

    enum Barcode {
                case UPCA(Int, Int, Int)
                case QRCode(String)
            }
            var productBarcode = Barcode.UPCA(8, 85909_51226, 3)
            productBarcode = .QRCode("ABCDEFGHIJKLMNOP")
            switch productBarcode {
            case let .UPCA(numberSystem, identifier, check):
                print("UPC-A with value of (numberSystem), (identifier), (check).")
            case let .QRCode(productCode):
                print("QR code with value of (productCode).")
            }
            // 输出 "QR code with value of ABCDEFGHIJKLMNOP."

    2.2 原始值(Raw Values):枚举成员可以被默认值(称为原始值)预先填充,其中这些原始值具有相同的类型。

    enum ASCIIControlCharacter: Character {
        case Tab = "	"
        case LineFeed = "
    "
        case CarriageReturn = "
    "
    }

    原始值可以是字符串,字符,或者任何整型值或浮点型值。每个原始值在它的枚举声明中必须是唯一的。当整型值被用于原始值,如果其他枚举成员没有值时,它们会自动递增。

    enum Planet: Int {
        case Mercury = 1, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
    }

    使用枚举成员的rawValue属性可以访问该枚举成员的原始值,通过参数为rawValue构造函数创建特定原始值的枚举。代码如下:

    let earthsOrder = Planet.Earth.rawValue
    // earthsOrder is 3
    let possiblePlanet = Planet(rawValue: 7)
    // possiblePlanet is of type Planet? and equals Planet.Uranus

    然而,并非所有可能的Int值都可以找到一个匹配的行星。正因为如此,构造函数可以返回一个可选枚举成员。在上面的例子中,possiblePlanetPlanet?类型,或“可选的Planet”。

    如果你试图寻找一个位置为9的行星,通过参数为rawValue构造函数返回的可选Planet值将是nil

    enum Planet: Int {
                case Mercury = 1, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
            }
            let positionToFind = 9
            if let somePlanet = Planet(rawValue: positionToFind) {
                switch somePlanet {
                case .Earth:
                    print("Mostly harmless")
                default:
                    print("Not a safe place for humans")
                }
            } else {
                print("There isn't a planet at position (positionToFind)")
            }

    这个范例使用可选绑定(optional binding),通过原始值9试图访问一个行星。if let somePlanet = Planet(rawValue: 9)语句获得一个可选Planet,如果可选Planet可以被获得,把somePlanet设置成该可选Planet的内容。在这个范例中,无法检索到位置为9的行星,所以else分支被执行。

  • 相关阅读:
    2018年7月10日笔记
    2018年7月7日笔记
    2018年7月5日笔记
    2018年7月3日笔记
    sed 命令详解
    《软件构架实践》阅读笔记01
    《掌握需求过程》阅读笔记06
    《掌握需求过程》阅读笔记05
    第十二周进度条
    《掌握需求过程》阅读笔记04
  • 原文地址:https://www.cnblogs.com/xumaodun/p/5580056.html
Copyright © 2020-2023  润新知