zoukankan      html  css  js  c++  java
  • swift学习笔记->结构与枚举

    先看swift的结构,  与C语言中学习的结构类似

    不同之处在于实例化语法和函数方法

    struct Point {
        var x = 0
        var y = 1
        mutating func change (newX:Int,newY: Int) {
            x = newX
            y = newY
        }
    }
    var p = Point()
    p.change(10, newY: 20)
    p.x

    定义一个结构与C语言中学到的一样,实例化时就像之前swift学到的函数调用

    与C语言另一个不同之处是swift的结构体中可以写函数方法,而C语言不能

    构造函数会自动添加一个初始化所有属性的构造方法,比如刚才代码调用方式可以这样

    var p1 = Point(x: 5, y: 6)

    值得注意的是  swift结构体是值类型,这里就不举例了

    什么时候用结构呢?

    当一个或一组值类型,其中的元素和属性未来不会更改时用结构
    其他时候建议用类 calss
    
    

    来看看枚举

    有其他语言基础的朋友们应该了解一些枚举,下面是枚举的定义语法

    enum Gender {
        case Male
        case Female
    }

    枚举怎么使用呢?  举个简单的例子

    enum Gender {
        case Male
        case Female
    
    }
    let weidong: Gender = .Male
    
    switch weidong {
    case .Male:
        print("男人")
    case Gender.Female:
        print("女人")
    }

    噢不 你说switch语法好像不太对?

    是的swift中的switch语法不太一样   与C语言的区别在于  不需要break  满足条件执行  执行完毕自动退出,并且需要默认选项default  不写会报错,

    只有在对枚举类型进行判断时只要把所有case可能性都写齐便可省略default

    下面看枚举关联类型

    enum Gender {
        case Male(String)
        case Female(Int,String) //表示可以关联任意类型,每个case关联的数据可以不一样
    
    }
    
    let wd = Gender.Male("")
    switch wd {
    case .Male(let x):
        print("zhe shi ge (x)")
    case .Female:
        print("nv")
    }
    
    let hy = Gender.Female(18, "zhanghongyan")
    switch wd {
    case .Male(let x):
        print("zhe shi ge (x)")
    case let .Female ( x , y): //相当于x与y都是let
        print("nv")
    }

    相信大家通过代码都能看懂了枚举的每个case情况都可以关联一个或多个类型,要使用类型可以再switch case中定义变量  语法也很好记

    原生值

    enum Status :Int{ //原生值,所有原生值都必须唯一
        case  UnApproved
        case Approved
        case X = 4  //=1 就报错
        case Y
        case XX
    
    }
    //
    let goods = Status.X
    goods.rawValue
    let goods1 = Status.UnApproved
    goods1.rawValue

    默认情况下Int类型原生值会从0开始自增长   当然也可以在定义的时候去设置比如case X 之后的case会随你设置的数自增

    .rawValue方法能访问原生值   当然原生值也能设置为其他类型  具体大家自己去试验

    关键字mutating
    当结构中有函数方法 函数方法又要修改结构中某一属性的值时 编译器会抛出错误
    struct s{
        var a=0
        var b=0
        func set(a:Int,b:Int){
            self.a=a
            self.b=b
        }
    }
    
    

    此时我们就需要在函数的前面加上mutating关键字进行修饰 

    在枚举中也是如此  修改self的值

    enum TriStateSwitch {
        case Off, Low, 
    High mutating func next() {
    switch self { case Off: self = Low case Low: self = High case High: self = Off } } }
  • 相关阅读:
    some tips
    ORA00847: MEMORY_TARGET/MEMORY_MAX_TARGET and LOCK_SGA cannot be set together
    Chapter 01Overview of Oracle 9i Database Perfomrmance Tuning
    Chapter 02Diagnostic and Tuning Tools
    变量与常用符号
    Chapter 18Tuning the Operating System
    标准输入输出
    Trace files
    DBADeveloped Tools
    Chapter 03Database Configuration and IO Issues
  • 原文地址:https://www.cnblogs.com/pengser/p/4972721.html
Copyright © 2011-2022 走看看