zoukankan      html  css  js  c++  java
  • 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分支被执行。

  • 相关阅读:
    一些你可能用到的代码
    iOS 键盘下去的方法
    iOS设计模式汇总
    随笔
    Spring cloud config 分布式配置中心 (三) 总结
    Spring cloud config 分布式配置中心(二) 客户端
    Spring cloud config 分布式配置中心(一) 服务端
    jdbcUrl is required with driverClassName spring boot 2.0版本
    JpaRepository接口找不到 spring boot 项目
    解决IntelliJ “Initialization failed for 'https://start.spring.io'
  • 原文地址:https://www.cnblogs.com/xumaodun/p/5580056.html
Copyright © 2011-2022 走看看