swift学习笔记③
2019-09-29 本文已影响0人
劳模007_Mars
语法篇
枚举
Swift 的枚举类似于 Objective C 和 C 的结构,使用 enum
关键词来创建枚举并且把它们的整个定义放在一对大括号内。例如我们定义以下表示星期的枚举:
// 定义枚举
enum DaysofaWeek {
case Sunday
case Monday
case TUESDAY
case WEDNESDAY
case THURSDAY
case FRIDAY
case Saturday
}
var weekDay = DaysofaWeek.THURSDAY
weekDay = .THURSDAY
switch weekDay {
case .Sunday:
print("星期日")
case .Monday:
print("星期一")
case .TUESDAY:
print("星期二")
case .WEDNESDAY:
print("星期三")
case .THURSDAY:
print("星期四")
case .FRIDAY:
print("星期五")
case .Saturday:
print("星期六")
} // 打印输出 星期四
枚举中定义的值(如 Sunday,Monday,……和Saturday)是这个枚举的成员值(或成员)。case
关键词表示一行新的成员值将被定义。
在使用枚举时,一旦变量的类型被确定为枚举类型后,就可以使用一个缩写语法为变量设置另一个枚举值,例如上面代码中:
weekDay = .THURSDAY
注意: 和 C 和 Objective-C 不同,Swift 的枚举成员在被创建时不会被赋予一个默认的整型值。在上面的DaysofaWeek例子中,Sunday,Monday,……和Saturday不会隐式地赋值为0,1,……和6。相反,这些枚举成员本身就有完备的值,这些值是已经明确定义好的DaysofaWeek类型。
枚举可分为关联值与原始值。
关联值
有时为了方便,可以将枚举的成员值和其他类型的值关联存储在一起,例如我们定义一个名为 Student
的枚举类型,它可以是 String
类型的 Score
和一个 Int
类型的 Grade
:
enum Student{
case score(Int)
case grade(String)
}
在使用时,我们可以分别进行赋值:
var studentScore = Student.score(98)
var studentGrade = Student.grade("A")
switch studentScore {
case .score(let studScore):
print("学生的成绩是: \(studScore)")
case .grade(let studGrade):
print("学生的成绩是: \(studGrade)")
} // 打印输出 学生的成绩是 98
原始值 Raw Values
枚举成员可以使用相同类型的默认值预先对应,这个默认值就是原始值。
原始值可以是字符串,字符,或者任何整型值或浮点型值。每个原始值在它的枚举声明中必须是唯一的。
例如:
enum Grade : String {
case perfect = "A"
case great = "B"
case good = "C"
case bad = "D"
}
print(Grade. perfect.rawValue) // A
print(Grade. great.rawValue) // B
print(Grade. good.rawValue) // C
print(Grade. bad.rawValue) // D
隐式原始值
如果枚举的原始值类型是 Int
、String
,Swift会自动分配原始值。例如:
enum Direction : String {
case north = "north"
case south = "south"
case east = "east"
case west = "west"
}
print(Direction.north) // north
print(Direction.north.rawValue) //north
上面例子中的枚举等价于:
enum Direction : String {
case north, south, east, west
}
再例如:
enum Month: Int {
case January = 1, February, March, April, May, June, July, August, September, October, November, December
}
let yearMonth = Month.May.rawValue
print("数字月份为: \(yearMonth)月") // 打印结果为 数字月份为: 5月
更多技术知识请扫码关注微信公众号
iOS进阶
iOS进阶.jpg