enum Method2:String {
case Add = "addStr"
case Sub = "subStr"
case Mul = "mulStr"
case Div = "divStr"
}
print("--------------->")
// 老版本中是
// Method2.Div.toRaw()
print(Method2.Div.rawValue)
print("--------------->")
// 这里是可选类型
// let op1 = Method2.RawValue("Add")
// print(op1)
// let op2 = Method2.RawValue("add")
// print(op2!)
print("--------------->")
// 老版本中是
// Method2.fromRaw("add")
let m1 = Method2(rawValue: "add")
print(m1)
let m2 = Method2(rawValue: "addStr")
print("--------->")
print(m2)
print(m2!)
func chooseMethod(op: String) -> (Double, Double)-> Double {
// 由于返回是可选类型, 所以有可能为nil, 最好使用可选绑定
if let rawop = Method2(rawValue: op) {
switch rawop {
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也省略掉
return { $0 / $1 }
default:
return { $0 + $1 }
}
}
return { $0 + $1 }
}
let val = chooseMethod(op: "addStr")(30, 7)
print("--------->")
print(val)