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

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

    其次是可为空的类型,我们要牢记所有类型默认不能为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. java安全沙箱(四)之安全管理器及Java API

    java是一种类型安全的语言,它有四类称为安全沙箱机制的安全机制来保证语言的安全性,这四类安全沙箱分别是: 类加载体系 .class文件检验器 内置于Java虚拟机(及语言)的安全特性 安全管理器及J ...

  2. .NET 平台下的插件化开发内核(Rabbit Kernel)-转

    什么是RabbitHub? RabbitHub 是专门针对 .NET 平台所设计.研发的一套相对完整的插件开发框架,它是由一个内核两大框架多个组件及一系列的开发时支持而构成. RabbitHub 架构 ...

  3. 函数指针_typedef

    一 函数指针 1 函数类型 函数的类型由它的返回值类型,和形参类型共通过决定,与函数名无关. eg:bool lengthcompare(const string&, const string ...

  4. 使用delphi+intraweb进行微信开发1--微信平台接入

    示例代码已经放出!请移步使用delphi+intraweb进行微信开发1~4代码示例进行下载,虽为示例代码但是是从我项目中移出来的,封装很完备适于自行扩展和修改. iw14.0.50来了,在新的版本中 ...

  5. JNI开发中String转换chat*工具

    char* Jstring2CStr(JNIEnv* env, jstring jstr) { char* rtn = NULL; jclass clsstring = env->FindCla ...

  6. 浅谈lua

    Lua脚本语言,关于它的介绍及优点特性,跨平台啊等等,在百度上可以搜索到很多,所以我就不再这里细说了.我主要想说的是lua在嵌入到应用程序中之后.. lua是按照标准的c/c++写的.当然它同样是可以 ...

  7. SOLID rule in JAVA design.

    Classes are the building blocks of your java application. If these blocks are not strong, your build ...

  8. SQLServer异步调用,批量复制

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  9. vs2010连接postgresql数据库

    Windows环境C/C++访问PostgreSQL主要有两种方式:利用Qt封装的数据库访问组件.利用PostgreSQL的API函数.使用Qt平台访问PostgreSQL的局限性很大,一旦脱离了访问 ...

  10. ios中,在SearchBar里面搜索内容,可根据内容来查找所需的信息资源,可获得SearchBar中的内容

    贴一段我很久以前写的小demo,你们就明白了,是把textField套在alertView里的@interface ViewController : UIViewController <UIAl ...