IOS系列swift语言之课时四

今天我们要讲的主要有:下标、可为空的类型、枚举(特殊的枚举:递归枚举)、原生值、关联值

首先来分析一下这个下标,就是说我们可以通过下标找到对应的值或者是改变对应的值。

    其次是可为空的类型,我们要牢记所有类型默认不能为nil.

        枚举的定义:可以一个case对应一个属性,也可以一个case对应多个属性,但是属性和属性之间用逗号隔开,注意中英格式

         第一种方式:  enum Gender{

                    case Male

                    case Female

                }

           第二种方式: enum Week{

                    case Mon,Tue,Wed,Thi,Fir,Sat,Sum

              }

      下面就是原生值,其实很好理解就是由第一个赋了初始值,然后其他的就会按照规律改变,下面可以见案例.

          关联值:每一个case可以关联不同类型的数据,而且每个case关联的都可能不一样

 1 mport UIKit
 2 /****下标***********************/
 3 class Teacher {
 4     var students = ["a","b","c"]
 5
 6     subscript(i: Int) ->String  {
 7         get{
 8             return students[i]
 9         }
10         set(nv) {
11             students[i] = nv
12         }
13
14     }
15
16 }
17
18 let t = Teacher()
19 t[0]
20 t[1] = "bbbb"
21 t[1]
22 //下标参数可以有多个,每个参数的类型也可以不一样
 1 /*  可为空的类型  */
 2
 3 //var t1: Teacher = nil
 4 //在swift中,所有的类型,默认都不能赋值为nil
 5 //不管是值类型还是引用类型
 6
 7
 8 //swift对nil(null)进行了集中统一的管理
 9 //有点类似于一个包装
10
11 //在类型后面添加一个?就表示这个类型是一个可为nil的类型
12 var a: Int?   = nil
13
14 //包装类型不是被包装类型,是一个全新的类型,
15 //跟被包装类型可以认为没有任何的关系
16
17 //wrapper
18 //class Nullable<T> {
19 //    var p: T
20 //    var p2 = nil
21 //}
22 a = 5
23 a = nil
24 a
25 a = 6
26 a!
27 if let b = a  {
28
29 }
 1 /********** 枚举    *////////////
 2
 3 enum Gender {
 4     case Male
 5     case Female
 6 }
 7
 8 enum Week {
 9     case Monday,Tue,Wed,Thi,Fir,Sat
10     case Sun
11 }
12 let w = Week.Sun
13 let g = Gender.Male
14 switch g {
15 //case Gender.Female:
16 //    print("nv...")
17
18 //default:
19 //    print("nan")
20
21     case .Female:
22         print("nv...")
23     case .Male:
24         print("nan...")
25 }
 1 //原生值(Raw Value)
 2
 3 //原生值类型只能是字符类型(CHaracher,string,)和数字类型
 4 enum FirstEnum: Int {
 5     case a = 15,b,c,d
 6 }
 7
 8 let fe = FirstEnum.a
 9 fe.rawValue
10
11 let f3 = FirstEnum(rawValue: 17)
12 f3
13 f3?.rawValue
 1 //关联值(Associative Value)
 2 //每个case可以关联多个不同类型的数据
 3 //也不需要每个case关联的类型是一样的。
 4 enum TiaoXingMa {
 5     case YiWei(Int,Int)
 6     case ErWei(String)
 7 }
 8
 9 var txm = TiaoXingMa.YiWei(9, 1234)
10
11 txm = .ErWei("asdfasdfasfd")
  1 //递归枚举(recusive enum)
  2
  3 indirect enum DiGui {
  4     case A
  5     case B(Int)
  6     case C(DiGui)
  7 }
  8 let dga = DiGui.A
  9
 10 var dg = DiGui.A
 11
 12 dg = .B(555)
 13 //dg = .C(DiGui.A)
 14 dg = .C(dga)
 15
 16
 17 //7 * (8+9)
 18 //7*8 + (9*4)
 19 indirect enum SuanShuBiaoDaShi {
 20     case ShuZi(Int)
 21     case Jia(SuanShuBiaoDaShi,SuanShuBiaoDaShi)
 22     case Cheng(SuanShuBiaoDaShi,SuanShuBiaoDaShi)
 23 }
 24 //7 * (8+9)  // 1+2 * 3+5*8 +4*5
 25 let exp8 = SuanShuBiaoDaShi.ShuZi(8)
 26 let exp7 = SuanShuBiaoDaShi.ShuZi(7)
 27 let exp9 = SuanShuBiaoDaShi.ShuZi(9)
 28
 29 let exp8jia9 = SuanShuBiaoDaShi.Jia(exp8, exp9)
 30 let exp7cheng8Jia9 = SuanShuBiaoDaShi.Cheng(exp7, exp8jia9)
 31
 32
 33 func yunsuan(exp: SuanShuBiaoDaShi) -> Int {
 34
 35     switch exp {
 36     case .ShuZi(let num):
 37         return num
 38     case let .Jia(left, right):
 39         return yunsuan(exp: left) + yunsuan(exp: right)
 40     case  .Cheng(let left, let right):
 41         return yunsuan(exp: left) * yunsuan(exp: right)
 42
 43     }
 44
 45 }
 46
 47 let result = yunsuan(exp: exp7cheng8Jia9)
 48 result
 49
 50
 51 //算出3+2
 52 //算出5*3
 53 //算出(1+2)*(3+4)
 54
 55 //算出自然数的和
 56 //func add(max: int)->int
 57 //从1开始,max假设为2 结果就是1+ 2
 58 //如果max 为10 加过1+2+3.。。。+10
 59 //1构建一个类。来实现刚才的功能
 60
 61 //class Person {
 62 //    var name = "meiyouminzi"
 63 //    var shangSi: Person?
 64 //}
 65 //
 66 //let ceo = Person()
 67 //ceo.name = "chenjun"
 68 //
 69 //let lieyuanjun = Person()
 70 //lieyuanjun.name = "lieyuanjun"
 71 //lieyuanjun.shangSi = ceo
 72
 73 //class Person {
 74 //    var name = "meiyoumingzi"
 75 //    var father: Person?
 76 //    var mother: Person?
 77 //}
 78 //let cj = Person()
 79 //cj.name = "cj"
 80 //let cjf = Person()
 81 //
 82 //cjf.name = "cjf"
 83 //let cjm = Person()
 84 //cjm.name = "cjm"
 85 //cj.father = cjf
 86 //cj.mother = cjm
 87
 88 class Expression {
 89     var caozuofu = ""
 90     var shuzi = 0
 91     var left: Expression?
 92     var right: Expression?
 93
 94     func yunsuan(exp: Expression) -> Int {
 95
 96         switch exp.caozuofu {
 97         case "+":
 98             return yunsuan(exp: exp.left!) + yunsuan(exp:  exp.right!)
 99         case  "*":
100             return yunsuan(exp: exp.left!) * yunsuan(exp: exp.right!)
101         default:
102             return exp.shuzi
103         }
104
105     }
106
107 }
108
109 let e7 = Expression()
110 e7.shuzi = 7
111 let e8 = Expression()
112 e8.shuzi = 8
113 let e9 = Expression()
114 e9.shuzi = 9
115
116 let e89 = Expression()
117 e89.caozuofu = "+"
118 e89.left = e8
119 e89.right = e9
120 let e7mule89 = Expression()
121 e7mule89.caozuofu = "*"
122 e7mule89.left = e7
123 e7mule89.right = e89
124
125 let rys = e7mule89.yunsuan(exp: e7mule89)
126 //let ys = Expression()
127 //let cys = ys.yunsuan(exp: (e7mule89))

以上就是简单的涉猎枚举,其实枚举的作用就是当我们调用的时候不记得了属性或者是打错了,它会有提示,而不至于我们都不知道自己错在哪里了.当然这只是我个人的理解!

    最后面有几道题,需要的自己看一下.

        迎新晚会要忙死了,估计都没什么午休和业余时间,尽量多发一些,I want to be fall asleep.

  

时间: 2024-08-10 15:08:49

IOS系列swift语言之课时四的相关文章

苹果新的编程语言 Swift 语言进阶(四)--字符串和收集类型

一.字符串( String  )和字符类型(Character) 字符串是一种字符的带次序的收集类型(相当于数组),字符是字符串中的元素. 在Swift 语言中,字符串是编码独立的Unicode字符的组合,并提供相应方法来获取以各种Unicode呈现方式包含的字符. 1. 字符串定义和初始化 Swift 语言使用var或let关键字来定义一个常量字符串(不可修改)或变量字符串(可以修改).  而不是像Object C语言一样定义两种不同的类型. Swift 语言允许使用一个双引号的字符串来初始化

iOS之Swift语言的学习

好久都没有来这个熟悉而又陌生的地方啦, 想想已经有两三个月了吧,不过我相信以后还是会经常来的啦,因为忙碌的学习已经过去啦,剩下的就是要好好的总结好好的复习了,好好的熟悉下我们之前学习的知识点,将他们有条理的串联起来. 在之前的将近三个月里面,不管是忙碌还是怎么样吧, 也许在有些人看来这是非人的生活,但是内个人都有自己的过法吧,面对自己从未接触过的代码和语法,刚开始确实是有那么一点点的害怕,但是慢慢的就没有那种感觉了,渐渐的也发现其实敲代码并没有那么的可怕,也没有那么的难.经过三个月与代码的磨合我

iOS开发系列--Swift语言

Swift是苹果2014年推出的全新的编程语言,它继承了C语言.ObjC的特性,且克服了C语言的兼容性问题.Swift发展过程中不仅保留了 ObjC很多语法特性,它也借鉴了多种现代化语言的特点,在其中你可以看到C#.Java.Javascript.Python等多种语言的影子.同时在 2015年的WWDC上苹果还宣布Swift的新版本Swift2.0,并宣布稍后Swift即将开源,除了支持iOS.OS X之外还将支持linux. 本文将继续iOS开发系列教程,假设读者已经有了其他语言基础(强烈建

Swift语言学习(四)字符串与Array等集合的使用

Swift 提供了C和Objective-C基础类型的自己一套版本,包括用于整型的Int,用于浮点值的Double和Float,用于布尔值的Boolean,和用于文本数据的String.Swift还提供了Array和Dictionary这两种集合类型的增强版本. 我们知道在iOS开发中用的最多的基础类型可能就数字符串了,以及一些集合类型的使用,下面我们来简单学习下字符串String以及Array.Dictionary等集合类型的使用方法 一.字符串  1.字符串的字面量 , 例如"jeck&qu

iOS开发系列--Swift进阶

概述 上一篇文章<iOS开发系列--Swift语言>中对Swift的语法特点以及它和C.ObjC等其他语言的用法区别进行了介绍.当然,这只是Swift的入门基础,但是仅仅了解这些对于使用Swift进行iOS开发还是不够的.在这篇文章中将继续介绍一些Swift开发中一些不常关注但是又必备的知识点,以便对Swift有进一步的了解. 访问控制 和其他高级语言一样Swift中也增加了访问控制,在Swift中提供了private.internal.public三种访问级别,但是不同的是Swift中的访问

关于Swift语言

继Objective--C以来, 苹果公司一直沿用该语言作为iPad和iPhone的开发语言.它是一门面向对象的编程语言,是一门对C语言进行封装的语言. WWDC于北京时间6月3日凌晨1点在旧金山召开.在大会上,它发布了两个系统,OS Yosemite和iOS 8, Swift语言也是在那时同时发布的, 仅发布后一天,有关该语言的电子书就被下载了37万次以上. 网易科技讯 6月5日消息,据国外媒体报道,苹果新编程语言Swift,从开始研发到最终发布仅用了不足4年时间.该语言背后的创造者为苹果开发

使用swift语言进行IOS应用开发

在Swift中能够直接使用Objective-C语言提供的api (包括系统框架与自己的定制代码),也能够在Objective-C中使用Swift提供的类和api ,还能够在一个工程中同时混合使用Swift 和Objective-C两种语言,两种语言之间能够互通和互用. 任意Objective-C的框架或C库(包括所有的Objective-C系统框架,例如Foundation.UIKit.SpriteKit以及系统提供的公共c库)作为模块被直接导入Swift 供Swift语言使用. 例如为了使用

IOS学习之路——Swift语言(1)——基本类型、运算符与逻辑控制语句

一.变量 变量标识符必须以字符包括Unicode编码字符.美元字符$.下划线_开头,不能以数字开头,不能包含空格.更不能使用关键字命名. swift中变量的声明使用var关键字,常量的声明使用let关键字. 1 var name="Swift"; 2 var version=2.2; 3 let company:String="Apple"; 变量的声明: 1. 可以使用,逗号分割变量来同时声明多个变量 2. 可以使用:类型来同时指明多个变量的类型 在Mac中可以使

iOS开发系列--C语言之基础知识

概览 当前移动开发的趋势已经势不可挡,这个系列希望浅谈一下个人对IOS开发的一些见解,这个IOS系列计划从几个角度去说IOS开发: C语言 OC基础 IOS开发(iphone/ipad) Swift 这么看下去还有大量的内容需要持续补充,但是今天我们从最基础的C语言开始,C语言部分我将分成几个章节去说,今天我们简单看一下C的一些基础知识,更高级的内容我将放到后面的文章中. 今天基础知识分为以下几点内容(注意:循环.条件语句在此不再赘述): Hello World 运行过程 数据类型 运算符 常用