一、枚举
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类的初始化
类的定义和结构体类似,但编译器并没有为类自动生成可以传入成员值的初始化器
如果类的所有成员都在定义的时候指定了初始值,编译器会为类生成无参的初始化器
网友评论