1.
枚举语法
1)枚举的定义
注意:
①不像C和Objective-C一样,Swift的枚举成员在被创建时不会被赋予一个默认的整数值。在上面的CompassPoints例子中,North,South,East和West并不是等于0,1,2和3
②良好的书写习惯是,每个枚举变量均以大写开头,并且枚举的名字不要使用复数形式
上面的例子或者也可以这样写:
enum CompassPoint { case North, South, East, West }
将所有成员放在一个case中,并用逗号隔开
2)枚举类型的使用
枚举类型使用时和使用类的属性一样。
var a = CompassPoint . North
3)省略枚举类型
当 a的类型被推断为CompassPoint的一个可能值时。你可以使用更短的点(.)语法将其设置为另一个CompassPoint的值,省略枚举类型:
2. 匹配枚举值和Switch语句
重点:
①当枚举值和switch语句连用时,也可以省略枚举类型
②使用switch时,必须考虑到所有的枚举对象,否则编译器会报错
3. 实例值
枚举类型可以定义实例值,在使用的时候再给实例赋具体的值
①枚举值可以是不同类型的,任何类型的值
②枚举定义时不一定要赋值,可以在使用时再赋值
③在switch中使用时,需要再定义变量来存放枚举值
4.原始值
1) 原始值定义
原始值就和C语言中的枚举差不多
重点:
①在定义的时候申明原始值类型,这里是 Int 类型。原始值类型可以是 字符串,字符,或者任何整型值或浮点型值
②每个原始值在它的枚举声明中必须是唯一的。
③当整型值被用于原始值,如果其他枚举成员没有值时,它们会自动递增。这里second=2,third=3
2)原始值的使用
使用枚举成员的toRaw方法可以访问该枚举成员的原始值:
let a = test . second . toRaw () //a=2 Int 类型
使用枚举的fromRaw方法可以找到具有特定原始值的枚举成员
let b = test .fromRaw( 2 ) //b = test.second
5.函数
枚举中还可以使用函数
1)枚举的定义
使用enum关键词并且把它们的整个定义放在一对大括号内:
enum SomeEumeration { // enumeration definition goes here }
下面来看看具体例子:
enum CompassPoint {
case North
case South
case East
case West
}
注意:
①不像C和Objective-C一样,Swift的枚举成员在被创建时不会被赋予一个默认的整数值。在上面的CompassPoints例子中,North,South,East和West并不是等于0,1,2和3
②良好的书写习惯是,每个枚举变量均以大写开头,并且枚举的名字不要使用复数形式
上面的例子或者也可以这样写:
enum CompassPoint { case North, South, East, West }
将所有成员放在一个case中,并用逗号隔开
2)枚举类型的使用
枚举类型使用时和使用类的属性一样。
var a = CompassPoint . North
3)省略枚举类型
当 a的类型被推断为CompassPoint的一个可能值时。你可以使用更短的点(.)语法将其设置为另一个CompassPoint的值,省略枚举类型:
var a = CompassPoint.North
a = .South
2. 匹配枚举值和Switch语句
switch a {
case .North:
println("Lots of planets have a north")
case .South:
println("Watch out for penguins")
case .East:
println("Where the sun rises")
case .West:
println("Where the skies are blue")
}
重点:
①当枚举值和switch语句连用时,也可以省略枚举类型
②使用switch时,必须考虑到所有的枚举对象,否则编译器会报错
3. 实例值
枚举类型可以定义实例值,在使用的时候再给实例赋具体的值
enum test{
case name(String)
case count(Int,Int)
} //枚举定义的是多种不同类型
var a = test.name("小笨狼") //枚举类型中具体值可以在使用时才赋值
switch a{
case .name(let nameString): //定义nameString来存放枚举的值,这里是"小笨狼"
println(nameString)
case let .count(count1,count2): //如果有多个值,可以将let或者var放在括号外面一起定义
println(count1+count2)
}
重点:
①枚举值可以是不同类型的,任何类型的值
②枚举定义时不一定要赋值,可以在使用时再赋值
③在switch中使用时,需要再定义变量来存放枚举值
4.原始值
1) 原始值定义
原始值就和C语言中的枚举差不多
enum test:Int{
case first = 1
case second,third
}
重点:
①在定义的时候申明原始值类型,这里是 Int 类型。原始值类型可以是 字符串,字符,或者任何整型值或浮点型值
②每个原始值在它的枚举声明中必须是唯一的。
③当整型值被用于原始值,如果其他枚举成员没有值时,它们会自动递增。这里second=2,third=3
2)原始值的使用
使用枚举成员的toRaw方法可以访问该枚举成员的原始值:
let a = test . second . toRaw () //a=2 Int 类型
使用枚举的fromRaw方法可以找到具有特定原始值的枚举成员
let b = test .fromRaw( 2 ) //b = test.second
5.函数
枚举中还可以使用函数
enum test:Int{
case first = 1
case second,third
func descript() -> String{
switch self{
case .first:
return "first"
case .second:
return "second"
case .third:
return "third"
}
}
}
if let c = test.fromRaw(2) {
println(c.descript()) //输出second
}
打印
c.
descript
()
输出second,但是如果c不在if中定义,编译器会报错,找不到descript的成员变量,这个问题我还没弄清楚为什么