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

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

    其次是可为空的类型,我们要牢记所有类型默认不能为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. MVC项目中WebViewPage的实战应用

    由于公司的项目可能会卖到国外,所以需要支持多语言.今天我就在目前的项目中实现了多语言功能,下面记录我的具体实现. 1.相信很多朋友在用MVC做项目时候,都会遇到“视图必须派生自 WebViewPage ...

  2. 十大Intellij IDEA快捷键(转)

    1 智能提示 Intellij首当其冲的当然就是Intelligence智能!基本的代码提示用Ctrl+Space,还有更智能地按类型信息提示Ctrl+Shift+Space,但因为Intellij总 ...

  3. 【javascript 进阶】异步调用

    前言 javascript的中的异步是很重要的概念,特别是ajax的提出,给整个web带来了很大的影响,今天就介绍下javascript的异步编程. 同步与异步 何为同步?何为异步呢? 同步:说白了就 ...

  4. [转]Android使用WebView从相册/拍照中添加图片

    原地址:http://blog.csdn.net/djcken/article/details/46379929 解决这个问题花了很长时间搜索了解,网上大部分使用openFileChooser但都没解 ...

  5. ajax传递数组到后台

    //实体类 public class Person { private int ID{get;set;} private string Name{get;set;} private int Age{g ...

  6. imx6移植ffmpeg2.3

    yasm ./configure --enable-shared --prefix=/usr/local/arm/yasm --host=arm-linux 修改Makefile CC=arm-non ...

  7. Tcp/IP

     在数据传输完毕之后,通信双方都可以发出释放连接的请求.释放连接的过程为如上图所示:      1)数据传输结束后,主机A的应用进程先向其TCP发出释放连接请求,不在发送数据.TCP通知对方要释放从A ...

  8. 你还记得windows workflow foundation吗

    很多年前,windows workflow foundation还叫WWF,而直译过来的名称让很多人以为它就是用来开发工作流或者干脆就是审批流的. 博主当年还是个懵懂的少年,却也知道微软不会大力推一个 ...

  9. Table of Contents ---BCM

    Table of ContentsAbout This Document................................................................ ...

  10. delpin常用函数

    if  r>570 then                  SET_TT(1);//超出多少行就用excel导出 类似数组用法:var        ts: TStringlist;begi ...