需要注意的是Swift中枚举属于一级类型
import UIKit
/*
swift枚举:
(1)枚举基本语法
Class One(一等类型)
*/
enum Method:String {
//两种写法是相同的
case Add = "add"
case Sub = "sub"
case Mul = "mul"
case Div = "div"
// case Add, Sub, Mul, Div
}
enum LineSegmentDescriptor{
case StartAndEndPattern(start:Double , end:Double)
case StartAndLenthPattern(start:Double , lenth:Double)
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
/*
swift枚举:
(1)枚举基本语法
Class One(一等类型)
(2)switch匹配枚举值
(3)枚举原始值(),成员值
(4)相关值
*/
// (3)成员值
print(chooseMethod(Method.Mul)(3,4))
//!!!最新的Swift版本不再支持toRaw和fromRaw了,只有rawValue属性和hashValue属性了!
print(Method.Add.hashValue)//哈希值
print(Method.Add.rawValue)//原始值
// (4)相关值
var m0:Method = .Add
var m1 = Method.Sub
var lsd = LineSegmentDescriptor.StartAndEndPattern(start: 10, end: 20)
switch lsd {
case .StartAndEndPattern(let s , let e):
print("\(s) \(e)")
case .StartAndLenthPattern(let s , let d):
print("\(s) \(d)")
default:
print("")
}
print(lsd)
// Do any additional setup after loading the view, typically from a nib.
}
// (2)switch匹配枚举值
func chooseMethod(op: Method) -> (Double,Double)->Double {
switch op {
case .Add:
func add(a:Double,b:Double) -> Double{
return a + b
}
case .Sub:
return {
(a:Double ,b:Double) -> Double in
return a - b
}
case .Mul:
return{return $0 * $1}
case .Div:
return{$0/$1}
default:
return{$0 + $1}
}
return {$0 + $1}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}