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 } } }
  • 相关阅读:
    POJ 3007 Organize Your Train part II (字典树 静态)
    POJ 3096 Surprising Strings
    移动APP安全测试
    monkey亲测
    PHP笔记
    my sql 只展示 前10条数据的写法
    面试问的东西
    定时构建常用 设置
    jenkins 定时构建 位置
    jenkins 使用的python 不是指定的python 的解决方法
  • 原文地址:https://www.cnblogs.com/pengser/p/4972721.html
Copyright © 2011-2022 走看看