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

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

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

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

         第一种方式:  enum Gender{

                    case Male

                    case Female

                }

           第二种方式: enum Week{

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

              }

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

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

 mport UIKit
/****下标***********************/
class Teacher {
var students = ["a","b","c"] subscript(i: Int) ->String {
get{
return students[i]
}
set(nv) {
students[i] = nv
} } } let t = Teacher()
t[]
t[] = "bbbb"
t[]
//下标参数可以有多个,每个参数的类型也可以不一样
 /*  可为空的类型  */

 //var t1: Teacher = nil
//在swift中,所有的类型,默认都不能赋值为nil
//不管是值类型还是引用类型 //swift对nil(null)进行了集中统一的管理
//有点类似于一个包装 //在类型后面添加一个?就表示这个类型是一个可为nil的类型
var a: Int? = nil //包装类型不是被包装类型,是一个全新的类型,
//跟被包装类型可以认为没有任何的关系 //wrapper
//class Nullable<T> {
// var p: T
// var p2 = nil
//}
a =
a = nil
a
a =
a!
if let b = a { }
 /********** 枚举    *////////////

 enum Gender {
case Male
case Female
} enum Week {
case Monday,Tue,Wed,Thi,Fir,Sat
case Sun
}
let w = Week.Sun
let g = Gender.Male
switch g {
//case Gender.Female:
// print("nv...") //default:
// print("nan") case .Female:
print("nv...")
case .Male:
print("nan...")
}
 //原生值(Raw Value)

 //原生值类型只能是字符类型(CHaracher,string,)和数字类型
enum FirstEnum: Int {
case a = ,b,c,d
} let fe = FirstEnum.a
fe.rawValue let f3 = FirstEnum(rawValue: )
f3
f3?.rawValue
 //关联值(Associative Value)
//每个case可以关联多个不同类型的数据
//也不需要每个case关联的类型是一样的。
enum TiaoXingMa {
case YiWei(Int,Int)
case ErWei(String)
} var txm = TiaoXingMa.YiWei(, ) txm = .ErWei("asdfasdfasfd")
 //递归枚举(recusive enum)

 indirect enum DiGui {
case A
case B(Int)
case C(DiGui)
}
let dga = DiGui.A var dg = DiGui.A dg = .B()
//dg = .C(DiGui.A)
dg = .C(dga) //7 * (8+9)
//7*8 + (9*4)
indirect enum SuanShuBiaoDaShi {
case ShuZi(Int)
case Jia(SuanShuBiaoDaShi,SuanShuBiaoDaShi)
case Cheng(SuanShuBiaoDaShi,SuanShuBiaoDaShi)
}
//7 * (8+9) // 1+2 * 3+5*8 +4*5
let exp8 = SuanShuBiaoDaShi.ShuZi()
let exp7 = SuanShuBiaoDaShi.ShuZi()
let exp9 = SuanShuBiaoDaShi.ShuZi() let exp8jia9 = SuanShuBiaoDaShi.Jia(exp8, exp9)
let exp7cheng8Jia9 = SuanShuBiaoDaShi.Cheng(exp7, exp8jia9) func yunsuan(exp: SuanShuBiaoDaShi) -> Int { switch exp {
case .ShuZi(let num):
return num
case let .Jia(left, right):
return yunsuan(exp: left) + yunsuan(exp: right)
case .Cheng(let left, let right):
return yunsuan(exp: left) * yunsuan(exp: right) } } let result = yunsuan(exp: exp7cheng8Jia9)
result //算出3+2
//算出5*3
//算出(1+2)*(3+4) //算出自然数的和
//func add(max: int)->int
//从1开始,max假设为2 结果就是1+ 2
//如果max 为10 加过1+2+3.。。。+10
//1构建一个类。来实现刚才的功能 //class Person {
// var name = "meiyouminzi"
// var shangSi: Person?
//}
//
//let ceo = Person()
//ceo.name = "chenjun"
//
//let lieyuanjun = Person()
//lieyuanjun.name = "lieyuanjun"
//lieyuanjun.shangSi = ceo //class Person {
// var name = "meiyoumingzi"
// var father: Person?
// var mother: Person?
//}
//let cj = Person()
//cj.name = "cj"
//let cjf = Person()
//
//cjf.name = "cjf"
//let cjm = Person()
//cjm.name = "cjm"
//cj.father = cjf
//cj.mother = cjm class Expression {
var caozuofu = ""
var shuzi =
var left: Expression?
var right: Expression? func yunsuan(exp: Expression) -> Int { switch exp.caozuofu {
case "+":
return yunsuan(exp: exp.left!) + yunsuan(exp: exp.right!)
case "*":
return yunsuan(exp: exp.left!) * yunsuan(exp: exp.right!)
default:
return exp.shuzi
} } } let e7 = Expression()
e7.shuzi =
let e8 = Expression()
e8.shuzi =
let e9 = Expression()
e9.shuzi = let e89 = Expression()
e89.caozuofu = "+"
e89.left = e8
e89.right = e9
let e7mule89 = Expression()
e7mule89.caozuofu = "*"
e7mule89.left = e7
e7mule89.right = e89 let rys = e7mule89.yunsuan(exp: e7mule89)
//let ys = Expression()
//let cys = ys.yunsuan(exp: (e7mule89))

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

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

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

  

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

  1. IOS系列swift语言之课时二

    今天我们要讲的就是函数[对于函数,在最后面还有几道题,喜欢的博友可以看了自己做一下,和我交流一下] 当然这与我们的c语言还是有一定的共同之处的,对于有一些c语言或者是java基础的童鞋,我觉得是很容易 ...

  2. IOS系列swift语言之课时八

    这节课需要讲的就是可选链,内存管理,引用计数,unowned解决 //: Playground - noun: a place where people can play import UIKit / ...

  3. IOS系列swift语言之课时三

    今天需要掌握的内容就是:闭包.类.结构体.属性(计算属性和延迟属性) 同样里面有一些题目,有兴趣的可以做一下. 首先我们需要知道什么是闭包?所谓的闭包就是一个代码块(一般是指函数以及被它捕获的成员变量 ...

  4. IOS系列swift语言之课时七

    这下需要掌握的就是类型转换,类的构造器,判断类型,异常,异常的处理,defer,范型,约束加速刷代码 import Foundation /* 类型转换 1.利用类的构造器进行转换 2.系统可能提供一 ...

  5. IOS系列swift语言之课时六

    这节课需要讲的就是协议,方法,委托模式(依赖倒转) 代码刷起中...... // // main.swift // ExAndProtocol // // Created by David on 23 ...

  6. IOS系列swift语言之课时五

    过了几天没来理博客了,这次我们要讲的有:类,属性,初始化init(),初始化器,构造器等 直接刷代码了....... //: Playground - noun: a place where peop ...

  7. iOS之Swift语言的学习

    好久都没有来这个熟悉而又陌生的地方啦, 想想已经有两三个月了吧,不过我相信以后还是会经常来的啦,因为忙碌的学习已经过去啦,剩下的就是要好好的总结好好的复习了,好好的熟悉下我们之前学习的知识点,将他们有 ...

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

    一.字符串( String  )和字符类型(Character) 字符串是一种字符的带次序的收集类型(相当于数组),字符是字符串中的元素. 在Swift 语言中,字符串是编码独立的Unicode字符的 ...

  9. iOS使用Swift语言检查并提示更新

    项目要上线了,产品要求跟安卓一样,一进去有一个提示框提示更新.虽然苹果在 Settings/iTunes Store & App Store 选项中有自动更新这一选项,而且添加版本号等等有被拒 ...

随机推荐

  1. Linux 搭建Nexus

    Linux 安装Maven和nexus代理仓库 1    说明 环境:redhat Enterprise Linux Server5.3-x64. 版本:Maven 3.0.5 ,Nexus-2.5. ...

  2. Nexus3.0.0+Maven的使用(一)

    1.Nexus介绍 Nexus是一个强大的Maven仓库管理器,它极大地简化了自己内部仓库的维护和外部仓库的访问.利用Nexus你可以只在一个地方就能够完全控制访问 和部署在你所维护仓库中的每个Art ...

  3. Linux下lampp详解 (转)

    重要文件解释: ProFTPD:一个Unix平台上或是类Unix平台上(如Linux, FreeBSD等)的FTP服务器程序,它是在自由软件基金会的版权声明(GPL)下开发.发布的免费软件,可以随意修 ...

  4. linux默认编辑器 sublime

    开发人员把Vi improved简称Vim Vim编辑器再内存缓冲区中处理数据. 如果再启动Vim时未指定文件名,或者这个文件不存在,Vim会新开一段缓冲区域来编辑. 如果你再命令行下指定了一个已有文 ...

  5. Pycharm注册码(2016.2)

    43B4A73YYJ-eyJsaWNlbnNlSWQiOiI0M0I0QTczWVlKIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiI ...

  6. Druid 基础使用-操作篇(Imply )

    一.Imply Druid 原生的配置较麻烦,在上一篇单机版安装中有所涉及   Imply 基于Druid 进行了一些组件的开发,提供开源社区版本和商业版,简化了部署,开发了一些应用.https:// ...

  7. ipad2 恢复

    1.用原装充电线连接电脑,并打开itunes~2.同时按住电源键和home键 10秒左右,直到白苹果画面变成黑屏3.按住home键~但要松开电源键,继续等待~直到ipad出现画面(如图) 4.这时候, ...

  8. ant 介绍 http://blog.csdn.net/sunjavaduke/archive/2007/03/08/1523819.aspx

    转自: 本内容包含了Ant的历史简要介绍,Ant的功能以及Ant框架的介绍,并对下载安装使用Ant进行了示例介绍,同时通过一个Java程序讲解了Ant的基本使用方法. 1.       Ant简介:这 ...

  9. 【练习】移动数据---解决null值

    1.创建数据文件: [oracle@host03 ~]$ vi base_data.dat ,zhangfei,zhangyide ,guanyu,guanyunchang ,liubei,liuxu ...

  10. Request与session与application的区别

    (1)request的setAttribute与getAttribute方法一般都是成对出现的,首先通过setAttribute方法设置属性与属性值,然后通过getAttribute方法根据属性获取到 ...