iOS进阶

swift学习笔记③

2019-09-29  本文已影响0人  劳模007_Mars

Swift学习笔记 - 文集

语法篇

枚举

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

隐式原始值

如果枚举的原始值类型是 IntString,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
上一篇下一篇

猜你喜欢

热点阅读