/*
Swift枚举
(1)枚举基本语法
(2)switch匹配枚举
(3)原始值
(4)原始值rawValue方法,2.0版本之前为fromRaw
(5)枚举关联值
(6)switch提取枚举关联值
*/
enum Method {
// case Add
// case Sub
// case Mul
// case Div
//等同于
case Add, Sub, Mul, Div
}
var m0: Method = .Add
//相当于类名.属性
var m1 = Method.Sub
/*
(2)switch匹配枚举值
*/
func chooseMethod(op: Method) -> (Double, Double) -> Double {
switch op {
case .Add:
func add(a:Double, b:Double) -> Double {
return a + b
}
return add
case .Sub:
return {(a: Double, b:Double) -> Double in return a - b}
case .Mul:
return {return $0 * $1}
case .Div:
return {$0 / $1}
//当我们的枚举全部包含在内时,就不用写default,否则会报一个警告;当我们的枚举没有列举完时,需要写default;
// default:
// return {$0 + $1}
}
}
let val = chooseMethod(.Mul)(30, 5)
print(val)
/*
(3)原始值
*/
enum Method1: Int {
// case Add
// case Sub
// case Mul
// case Div
//等同于
case Add = 5, Sub, Mul = 11, Div
//当指定一个值后,后面一次加1
}
print(Method1.Add.rawValue)
print(Method1.Sub.rawValue)
print(Method1.Mul.rawValue)
print(Method1.Div.rawValue)
enum Method2: String {
// case Add
// case Sub
// case Mul
// case Div
//等同于
case Add = "add", Sub = "sub", Mul = "mul", Div = "div"
}
print(Method2.Add.rawValue)
print(Method2.Sub.rawValue)
print(Method2.Mul.rawValue)
print(Method2.Div.rawValue)
//返回一个可选枚举类型,如果不加可选,会报错
let op: Method2? = Method2(rawValue: "Add")
print(op)
//枚举关联值
enum LineSegmentDescriptor {
//为枚举值关联不同的值
case StartAndEndPattern(start: Double, end: Double)
case StartAndLengthPattern(start: Double, length: Double)
}
var lsd = LineSegmentDescriptor.StartAndEndPattern(start: 10, end: 20)
//lsd = LineSegmentDescriptor.StartAndLengthPattern(start: 10, length: 10)
//switch提取枚举关联值
switch lsd {
case let .StartAndEndPattern(s, e):
print("\(s) -> \(e)")
case.StartAndLengthPattern(let s, let len):
print("start:\(s), length:\(len)")
}
Swift 基础学习(枚举基本语法)
最新推荐文章于 2024-08-01 00:32:19 发布