ios 开发

Swift使用(四)结构体,类,枚举

2021-01-19  本文已影响0人  iOS小洁

一、枚举

1.1 枚举的定义

    // 枚举的定义
    enum Season {case spring; case summer; case autumn; case winter}
    
    enum Season1 {
        case spring
        case summer
        case autumn
        case winter
    }
    
    enum Seaso2 { case spring, summer, autumn, winter }
    

1.2 枚举关联值

有时将枚举的成员值跟其他类型的值关联存储在一起,会非常有用

    //关联值
    enum Date {
        case digit(year: Int, month: Int, day: Int)
        case string(String)
    }
    
    var date = Date.digit(year: 2021, month: 01, day: 18);
    date = .string("20210120")
    
    switch date {
    case let .digit(year: a, month: b, day: c):
        print(a, "-", b, "-", c)
    case let .string(str):
        print(str)
    default:
        print("c")
    }
    
    switch date {
    case .digit(year: let a, month: 02, day: let c):
        print(a, "-", "01", "-", c)
    case .string("20210118"):
        print("20210118")
    case .string("20210119"):
        print("20210119")
    default:
        print("other");
    }

1.3 枚举原始值

枚举成员可以使用相同类型的默认值预先对应,这个默认值叫做:原始值。原始值不占用枚举类型的内存

如果枚举的原始值类型是Int、String,Swift会自动分配原始值

    //原始值
    enum Season3:String {
        case spring = "春天"
        case summer = "夏天"
        case autumn = "秋天"
        case winter = "冬天"
    }
    
    var season = Season3.winter;
    season = .autumn
    print(season) //autumn
    print(season.rawValue) //秋天
    
    enum Season4 : Int { case spring, summer, autumn, winter }//默认0123
    enum Season5 : Int { case spring = 1, summer, autumn = 5, winter }//默认1256
    
    

1.4 递归枚举 indirect

递归枚举需要加上indirect 关键字

     //递归枚举
    indirect enum Count {
        case num(Int)
        case sum(Count, Count)
        case difference(Count, Count)
    }
    
    enum Count2 {
        case num(Int)
        indirect case sum(Count2, Count2)
        indirect case difference(Count2, Count2)
    }

1.5 占用内存

二、结构体

2.1 结构体定义

    struct Date {
        var year: Int = 2021
        var month: Int
        var day: Int
    }

2.2 构造方法

编译器会根据情况,可能会为结构体生成多个初始化器,宗旨是:保证所有成员都有初始值

一旦在定义结构体时自定义了初始化器,编译器就不会再帮它自动生成其他初始化器

三、类

3.1类的定义

     class Student {
        var age: Int = 18
        var name: String = "xiaoming"
    }

3.2类的初始化

类的定义和结构体类似,但编译器并没有为类自动生成可以传入成员值的初始化器

如果类的所有成员都在定义的时候指定了初始值,编译器会为类生成无参的初始化器

上一篇 下一篇

猜你喜欢

热点阅读