作者:妞妞吃粑粑_577 | 来源:互联网 | 2023-06-20 12:27
***********swift学习之17--枚举--***************************枚举简单的说也是一种数据类型,只不过是这种数据类型只包含自
//***********swift学习之17--枚举--***************************
// 枚举简单的说也是一种数据类型,只不过是这种数据类型只包含自定义的特定数据,它是一组有共同特性的数据的集合。
// Swift 的枚举类似于 Objective C 和 C 的结构,枚举的功能为:
// 它声明在类中,可以通过实例化类来访问它的值。
// 枚举也可以定义构造函数(initializers)来提供一个初始成员值;可以在原始的实现基础上扩展它们的功能。
// 可以遵守协议(protocols)来提供标准的功能。
// 总之比 Objective C 的枚举更丰富、更灵活。也比 C 的枚举更具象。更像Objective C的类。
// 语法
// Swift 中使用 enum 关键词来创建枚举并且把它们的整个定义放在一对大括号内:
enum DaysOfWeek {
// 枚举定义在这里
case Monday
case Tuesday
case Wedensday
case Thursday
case Friday
case Saturday
case Sunday
}
// case 要写好多遍。如果不用写就好了。
var someDay = DaysOfWeek.Friday
someDay = .Sunday
switch someDay {
case .Monday:
print("Monday")
case .Tuesday:
print("Tuesday")
case .Wedensday:
print("Wedensday")
case .Thursday:
print("Thursday")
case .Friday:
print("Friday")
case .Saturday:
print("Saturday")
case .Sunday:
print("Sunday")
}
/*
注意: 和 C 和 Objective-C 不同,Swift 的枚举成员在被创建时不会被赋予一个默认的整型值。在上面的DaysofaWeek例子中,Sunday,Monday,……和Saturday不会隐式地赋值为0,1,……和6。相反,这些枚举成员本身就有完备的值,这些值是已经明确定义好的DaysofaWeek类型。
*/
// someDay = DaysOfWeek.Friday
// someDay = .Sunday
// someDay的类型可以在它被DaysofaWeek的一个可能值初始化时推断出来。
// 一旦someDay被声明为一个DaysofaWeek,我们就可以缩写语法(.)去设置重新赋DaysofaWeek的值
/*
原始值
在 Month 后面跟 :Int 来声明原始值枚举的类型,然后在定义case成员的时候需要提供原始值。
原始值可以是字符串/字符/整型值/浮点型值。每个原始值在它的枚举声明中必须是唯一的。
在原始值为整数的枚举时,不需要显式的为每一个成员赋值,Swift会自动为你赋值。
例如,当使用整数作为原始值时,隐式赋值的值依次递增1。如果第一个值没有被赋初值,将会被自动置为0。
*/
enum DayDay:Int {
case Yesterday = 0
case Today = 1
case Tommorrow = 2
}
// rawValue序号
let myday = DayDay.Yesterday.rawValue
print("我的天-----\(myday)")
enum Month: Int {
case January = 1, February, March, April, May, June, July, August, September, October, November, December
}
let yearMonth = Month.May.rawValue
print("数字月份为: \(yearMonth)。")
// 相关值
var imageView:UIImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 2000, height: 600))
imageView.image = UIImage(named: "test.png")
// 以下实例中我们定义一个名为 Student 的枚举类型,它可以是 Name(String) 的一个一个字符串类型相关值,或者是 Mark (Int,Int,Int,Int)的相关值。
enum Student {
case Name(String)
case Mark(Int,Int,Int)
}
var studDetails = Student.Name("Runoob")
var studMarks = Student.Mark(98,97,95)
switch studDetails {
case .Name(let studName):
print("学生的名字是: \(studName)。")
case .Mark(let Mark1, let Mark2, let Mark3):
print("学生的成绩是: \(Mark1),\(Mark2),\(Mark3)。")
}