1. 元组英文名字 Tuple,将多个数据类型(任意类型)组合成一个数据,与c语言的中的机构体有几分相似,功能也是非常强大的,尤其是在定义请求参数,状态之类的地方经常用到。

let http404Error:(Int,String) = (404,"Not Found")

let me:(Int,String,Double) = (99,"阿甘左",9999999)

http404Error.0    //0代表括号内第一个数值索引

http404Error.1    //1 代表括号内第二个数值索引,一次类推

//重新给 me这个tuple定义描述

let(Levl,Name,attacks) = me

levl    //等级99

Name  //"阿甘左"

attacks //"物理攻击9999999"

//还可以使用以下写法

var http500Error = (code:500,discription:"server error")

http500Error.code

http500Error.discription

//元组数据修改 2种方式(索引修改,描述名属性修改)

http500Error.code = 501

http500Error.discription = "new server error"

http500Error.0 = 502

http500Error.1 = "server error2"

2. tuple  combine with switch

let onePoint = (-15,15)

switch onePoint {

case (_ ,0):    // 原组可以作为case的判断条件, 这就意味着某一组 自定义的变量能够进行比较

// 而且还能使用 _  任意数类型,

print(" point at y-axis")

case (0,_):

print("point at x- axis")

case(0,0):

print("point at origin")

case (-20...20,-20...20):   // -20...20 一个区间的数据,这相当于除了确切相等的值,不等式也能在switch中进行判定了,简直就是逆天的节奏,这是作者集百家之强的结果。

print("point in specified rect")

}

var aPoint = (-15,15)

if aPoint.0 == aPoint.1 {

print("this point is in x = y ")

}else if aPoint.0 == -aPoint.1 {

print("this point is in x = -y")

}

/**使用新的写法,在绑定变量的同时,指定条件判断,感觉就像在盗版SQL*/

switch aPoint {

//在绑定一个变量的同时,可以绑定x == y

case let(x,y) where x == y:

print("x 与 y相等斜线上 x = y")

case let(x,y) where x == -y:

print("x 与 -y斜线上 x = -y")

default:

print("other")

}

3.可选值(Optional)故名思义就是可以选择的,及可以是确切的数,也可以为空。

标准写法

var optionalValue:Optional<Int>     //Optional为可选, <Int>为类型

简写

var sampleValue: Int ?    //Int为类型,?为可选

//String 转换Number

let possibleNumber = "123"

/**因为Int(possibleNumber) 转换可能会失败,所以转换为Optional类型,所以此处应该标注Int?,以防止程序出现错误时无法知道*/

let convertedNumber:Int? = Int(possibleNumber)

print(convertedNumber)

if Int(possibleNumber) != nil {

print("convert successfully")

}

else {

print("convert failure")

}

//可选值如果是nil,则unpackage will error,为了安全需要判断之后再接包,变量 + ! 表示 !

if convertedNumber != nil {

print(convertedNumber!)

}

else {

print(convertedNumber)

}

//如下规则,可选数必须经过解包之后才能运算 在变量后面加上! 即可, 但是选值本省的类型没变。所以如果你要运算 必须写成  convertedNumber ! + 400  这种形式

/**如下可选则,必须接包之后才能运算,可以赋值;可选值解包之后可以运算,可选值的类型本省没变*/

var y2:Int?

y2 = 200

print(y2)

//y2 = y2 + 100

var y3:Int? = y2

print(y3)

var y4:Int = y2!

print(y4)

if y2 != nil {

y2!

}

y2! += 3

print(y2!)

print(y2)

/**可选绑定,简化上面的安全解包;将变量赋值类型转换写到一行*/

if let actueNumber = Int("1234") {

print("convert sucessfully")

}else {

print("convert failure")

}

/**类型 + !,Int !代表声明自动解包的可选类型,使用时可以不用解包;但是得保证自动解包的类型不能是nil*/

var z:Int!

z = nil     // z为自动解包类型,赋值nil本身编译不会有错,但在运行时会崩溃。苹果格式----

//print(z)  error,打印时有一个解包的过程,所以会报错

z = 100

print(z)

//可选值赋值给一个变量,叫做可选绑定

let rez = z

print(rez)

//if rez {  //此方式错误❌  因为rez通过赋值后它的类型是  Int! ,自动解包类型需要判定是否空后才能作为条件判定, 此处正确写法    if rez != nil {   }else {   }

//

//}else {

//

//}

if rez == nil {

print("解包失败\(z)")

}else {

print("解包成功\(z)")

}

4. Bug 调试机神器----断言 assert。

其实原理很简单,就是运行到这一行的时候,通过函数指定一个判断语句,如果满足条件就往下运行,不满不足条件就停在这。实际开发的时候我们可以在需要确认数据的位置写下断言语句进行检测我们预估的变量数值是否正确

/**assert断言:当x 不等于100的时候程序继续执行下去;否者在判断行断开,在写代码的时候就不会自动运行了*/

var x = 101

assert(x != 100,"x 不等于100")

print("app continue")

/**func 表示Swift中的函数,partx为函数名字,Int为函数的类型

如下,对函数的型参进行断言,如果为0则为空;断言成立,程序继续向下运行,断言不成立,程序出错

*/

func testAssert(parx :Int) {

assert(parx != 0 ,"parx参数不能为0")

print(100/parx)

}

testAssert(3)

testAssert(100)

//testAssert(0)

2. Swift元组|可选值|断言的更多相关文章

  1. swift的可选值(optional)

    苹果那文档写了一大堆也没有好好的写一下可选值(optional)这个东西.就是在有一个“Optional Chaining”的章节,但是也不是很充分的说明.最后找了半天在“the basics”里墨迹 ...

  2. Swift语言指南(六)--可选值

    原文:Swift语言指南(六)--可选值 在值可能不存在的情况下使用可选值(optional), 可选值是: · 存在一个值,这个值等于 x 或 · 不存在任何值 注: 在 C 和 Objective ...

  3. Swift学习笔记(2)--元组(Tuples)、Optional(可选值)、(Assertions)断言

    1.Tuples(元组) 元组是多个值组合而成的复合值.元组中的值可以是任意类型,而且每一个元素的类型可以是不同的. 1>定义:使用()包含所有元素,用逗号分开,也可以对每个元素做命名 let ...

  4. 窥探Swift之新添数据类型元组与可选值

    今天的博客中就总结一下关于Swift中相对Objc新添加的两个数据类型:元组(Tuple)和可选值类型(Optional).上面这两个类型是Swift独有的类型,使用起来也是非常方便的,今天就通过一些 ...

  5. Swift基础语法(常量变量、数据类型、元组、可选、断言)

    本文来自Swift中文开发组,感谢翻译者的分享. 本文将分几部分对Swift对ios的语法做讲解.本文为第一节,主要讲解基础语法. 常量和变量 常量和变量把一个名字(比如maximumNumberOf ...

  6. Swift编程语言学习1.6——可选值

    可选值 使用可选(optionals)来处理值可能缺失的情况.可选表示: 有值,等于 x   或者没有值 注意: C 和 Objective-C 中并没有可选这个概念.最接近的是 Objective- ...

  7. swift可选值总结

    1.枚举结构: 2.装包.解包概念:关联值. 3.可选值声明: 4.解包: 5.可选值作为参量生成的链. 6.可选值调用链. 最后做个总结 访问可选对象的属性或方法时,可以用 ? 号 访问可选对象的属 ...

  8. C#函数式编程之可选值

    在我们的实际开发中已经会遇到可空类型,而在C#中自从2.0之后就提供了可空类型(Nullable<T>),普通的值类型是不可以赋值为NULL,但是在类型的后面加上问号就变成了可空类型,这样 ...

  9. 超链接a标签的属性target的可选值有哪些以及区别

    超链接a标签的属性target的可选值有哪些以及区别 1.<a target="_blank"></a> 2.<a target="_par ...

随机推荐

  1. hdu1201-18岁生日

    Gardon的18岁生日就要到了,他当然很开心,可是他突然想到一个问题,是不是每个人从出生开始,到达18岁生日时所经过的天数都是一样的呢?似乎并不全都是这样,所以他想请你帮忙计算一下他和他的几个朋友从 ...

  2. HTML中id、name、class 区别

    参考:http://www.cnblogs.com/polk6/archive////.html http://blog.csdn.net/ithomer/article/details/ HTML ...

  3. Struts 2.x No result defined for action 异常

      这是我跑struts2的第一个例子,跑的也够郁闷的,这个问题烦了我几个钟... 2011-5-10 10:10:17 com.opensymphony.xwork2.util.logging.co ...

  4. IOS第二天多线程-03对列组合并图片

    ********* // 2D绘图 Quartz2D // 合并图片 -- 水印 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *) ...

  5. js中的回调函数的理解和使用方法

    js中的回调函数的理解和使用方法 一. 回调函数的作用 js代码会至上而下一条线执行下去,但是有时候我们需要等到一个操作结束之后再进行下一个操作,这时候就需要用到回调函数. 二. 回调函数的解释 因为 ...

  6. php实现实现代码多主从,切换,轮询,健康检查

    现在很多框架现在都提供数据库读写分离,比如CI,TP,YII,一般使用正则表达书判断sql语句是读操作,还是写操作,但是有个缺点,没有给用主动判断,比如写入操作必须去立即读取主数据库的,如果不能立即判 ...

  7. 友盟推送里面的Alias怎么用?可以理解成账号吗?

    友盟推送里面的Alias怎么用?可以理解成账号吗? 我们的App有自己的账号体系的,想在每次用户登陆的时候,给用户发一个欢迎消息. 看了一下友盟推送,里面有一个概念叫做Alias(别名),但是官方文档 ...

  8. TOMCAT启动时报错:the CATALINA_HOME environment variable is not defined correctly

    运行tomcat/bin目录下的startup.bat时报错:the CATALINA_HOME environment variable is not defined correctly 碰到这个问 ...

  9. phpcms流程

    phpcms流程1: 安装 将下载好的文件放到www目录下 地址栏中输入 http://localhost/phpcms/install_package/install 打开安装页面 进行安装即可. ...

  10. HTML5革命即将爆发

    近日,关于"HTML5生态重建冷思考"成为了很多人热烈讨论的话题.在网页制作市场上面,HTML5技术成为了颇为关注的焦点,在行业和社会各界引起了广泛的关注.HTML5网页制作也创造 ...