zoukankan      html  css  js  c++  java
  • 初学swift笔记 枚举(七)

      1 import Foundation
      2 
      3 /*
      4 枚举
      5 
      6 语法结构
      7 enum 类型 {
      8     case 值
      9 }
     10 */
     11 //定义一个枚举 写法1
     12 enum LiuShiQun {
     13     case Name
     14     case Age
     15     case Sex
     16     case Add
     17     case Sub
     18     case Mul
     19     case Div
     20 }
     21 //定义一个枚举 写法2
     22 enum LiuShiQun_1 {
     23     case Add,Sub
     24     case Mul
     25     case Div
     26 }
     27 //定义一个枚举变量  写法1
     28 let enum_Name: LiuShiQun = .Name
     29 //定义一个枚举变量  写法2
     30 let enum_Age: LiuShiQun = LiuShiQun.Age
     31 // 定义枚举变量 写法3
     32 let enum_Add = LiuShiQun_1.Add
     33 
     34 //与switch结合  将闭包的各种方式加入到方法里
     35 //匹配的时候,如果不将枚举对所有值都case出来,switch会报错 否则末尾添加default
     36 func chooseMethod(op: LiuShiQun_1) ->(Double,Double) -> Double {
     37     switch op {
     38     case .Add:
     39             func add(a: Double,b: Double) -> Double {
     40                 return a+b
     41         }
     42             return add
     43     case .Sub:
     44             return {(a: Double,b: Double) -> Double in return a - b}
     45     case .Mul:
     46             return {return $0 * $1}
     47     case .Div:
     48             return {$0 / $1}
     49     default :
     50         return{$0 + $1}
     51     }
     52 }
     53 //声明一个对象 调用方法,传递枚举的值 得到一个闭包类型的值
     54  let val_1 = chooseMethod(.Mul)
     55 //调用val_1闭包
     56 let value_2 = val_1(4,7)
     57 println(value_2)
     58 
     59 /*
     60 枚举原始值定义
     61 enum Lsq: Int {
     62  case Add,Sub,Mul,Div
     63 }
     64 不指定值的话,从0开始,依次 +1
     65 Lsq.Add.toRaw() 得到Lsq.Add的原始值  - 对应 fromRaw 将值反推 将原始值转为枚举值
     66 Lsq.Add.rawValue 得到Lsq.Add的原始值
     67 
     68 
     69 enum Lsq_1: Int {
     70 case Add=0,Sub=1,Mul=3,Div=4
     71 }
     72 
     73 enum Lsq_2: String {
     74 case Add="add",Sub="sub",Mul="mul",Div="div"
     75 }
     76 */
     77 
     78 enum Lsq_1: Int {
     79     case Add=0,Sub,Mul,Div
     80 }
     81 println(Lsq_1.Add.rawValue)
     82 enum Lsq_2: String {
     83     case Add="add",Sub="sub",Mul="mul",Div="div"
     84 }
     85 println(Lsq_2.Add.rawValue)
     86 
     87 let op : Lsq_2? = Lsq_2(rawValue: "add")
     88 println(op)
     89 //字符串转枚举值
     90 func get_enums(str: String) {
     91     let new_op : Lsq_2? = Lsq_2(rawValue: str)
     92     if var temp_op = new_op {
     93         switch temp_op {
     94         case .Add:
     95             println("Add")
     96         case .Div:
     97             println("Div")
     98         case .Mul:
     99             println("Mul")
    100         case .Sub:
    101             println("Sub")
    102         default :
    103             println("error: (str)")
    104         }
    105     }
    106     else {
    107         println("no")
    108     }
    109 }
    110 get_enums("adds")
    111 
    112 //枚举相关值
    113 //两个值关联枚举值
    114 enum LineSegmentDescriptor {
    115     case StartAndEndPattern(start : Double,end : Double)
    116     case StartAndLengPattern(start : Double,length : Double)
    117 }
    118 //定义一个变量 指定枚举值的两个关联值
    119 var lsd = LineSegmentDescriptor.StartAndEndPattern(start: 1, end: 10)
    120 lsd = LineSegmentDescriptor.StartAndLengPattern(start: 1, length: 9)
    121 //将值提取出来
    122 switch lsd {
    123 //case let .StartAndEndPattern( s, e)://switch 值绑定模式
    124 case .StartAndEndPattern(let s,let e)://switch 值绑定模式
    125     println("开始(s) 结束(e)")
    126 case .StartAndLengPattern(let s,let e)://switch 值绑定模式
    127     println("开始(s) 结束(e)")
    128 }
     
  • 相关阅读:
    kafka-python基本使用
    RabbitMq 消息队列详解
    Socket 编程
    python 进程, 线程 ,协程,锁,协程应用到爬虫的讲解
    python中with的用法
    为什么 Elasticsearch 需要堆内存来存储数据
    面向数据的架构
    跟我一起学Redis之看完这篇比常人多会三种类型实战(又搞了几个小时)
    跟我一起学.NetCore之熟悉的接口权限验证不能少(Jwt)
    跟我一起学.NetCore之WebApi接口裸奔有风险(Jwt)
  • 原文地址:https://www.cnblogs.com/lsqandzy/p/4908929.html
Copyright © 2011-2022 走看看