enum Method2:String {
case Add = "addStr"
case Sub = "subStr"
case Mul = "mulStr"
case Div = "divStr"
}
@H_403_60@ print("--------------->")
// 老版本中是
// Method2.Div.toRaw()
print(Method2.Div.rawValue)
// 这里是可选类型
// let op1 = Method2.RawValue("Add")
// print(op1)
// let op2 = Method2.RawValue("add")
// print(op2!)
// 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)