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

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

    其次是可为空的类型,我们要牢记所有类型默认不能为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. Nhibernate对应关系参数介绍

    一.多对一关联映配置介绍 <many-to-one name="PropertyName" 属性名 column="column_name" 数据库字段名 ...

  2. 第二周:Java For循环方法简介

    1.for循环的作用 Java当中循环的意思就是让Java程序重复地执行某些语句.在程序设计时,常常需要处理大量的重复动作, 采用循环结构可以降低程序书写的长度和复杂度可使复杂问题简单化,提高程序的可 ...

  3. TCP/IP详解 (转)

    TCP/IP详解学习笔记(1)-基本概念 为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣经中 ...

  4. python 2day

    一 优化 username='alex' password=‘alex123’ 可以写成 username,password =‘alex’,'alex123' 二.再次优化 for i in ran ...

  5. delphi.thread.同步

    注意:此文只是讲线程间的同步,其它同步不涉及. 线程同步是个好话题,因为写线程经常会遇到,所以就写写自己知道的东西. D里面,同步(特指线程同步)从线程的角度来分,有几种情况: 1:主线程与工作线程的 ...

  6. 使用 Google Web Fonts

    Google Fonts 的介绍:Google Fonts 并不是简单的字体下载站 Google Fonts 地址:https://www.google.com/fonts 左上角可以输入查找的字体名 ...

  7. vs2012中添加lib,.h文件方法(原)

    项目.属性.C/C++.附加包含目录:填写附加头文件(*.h)所在目录 分号间隔多项项目.属性.链接器.附加库目录:填写附加依赖库(*.lib)所在目录 分号间隔多项项目.属性.链接器(点前面的+展开 ...

  8. Java 2D API - 2. Graphics 入门

    Java 2D API强大而复杂,不过大多时候我们只需使用java.awt.Graphcis类的部分功能.下面的内容将覆盖大多数的常见应用. Graphics 类中的方法大致可以分为两类: Draw ...

  9. c# mybatis net +mysql

    1找到  mybatis.net最好有个例子 http://www.codeproject.com/Articles/894127/WebControls/#_comments  在这里... 这是一 ...

  10. jq封装的tab切换

    function tab(a,b,c){ $(a).on(c,function(){ $(this).addClass('active').siblings().removeClass('active ...