2. Swift元组|可选值|断言
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元组|可选值|断言的更多相关文章
- swift的可选值(optional)
苹果那文档写了一大堆也没有好好的写一下可选值(optional)这个东西.就是在有一个“Optional Chaining”的章节,但是也不是很充分的说明.最后找了半天在“the basics”里墨迹 ...
- Swift语言指南(六)--可选值
原文:Swift语言指南(六)--可选值 在值可能不存在的情况下使用可选值(optional), 可选值是: · 存在一个值,这个值等于 x 或 · 不存在任何值 注: 在 C 和 Objective ...
- Swift学习笔记(2)--元组(Tuples)、Optional(可选值)、(Assertions)断言
1.Tuples(元组) 元组是多个值组合而成的复合值.元组中的值可以是任意类型,而且每一个元素的类型可以是不同的. 1>定义:使用()包含所有元素,用逗号分开,也可以对每个元素做命名 let ...
- 窥探Swift之新添数据类型元组与可选值
今天的博客中就总结一下关于Swift中相对Objc新添加的两个数据类型:元组(Tuple)和可选值类型(Optional).上面这两个类型是Swift独有的类型,使用起来也是非常方便的,今天就通过一些 ...
- Swift基础语法(常量变量、数据类型、元组、可选、断言)
本文来自Swift中文开发组,感谢翻译者的分享. 本文将分几部分对Swift对ios的语法做讲解.本文为第一节,主要讲解基础语法. 常量和变量 常量和变量把一个名字(比如maximumNumberOf ...
- Swift编程语言学习1.6——可选值
可选值 使用可选(optionals)来处理值可能缺失的情况.可选表示: 有值,等于 x 或者没有值 注意: C 和 Objective-C 中并没有可选这个概念.最接近的是 Objective- ...
- swift可选值总结
1.枚举结构: 2.装包.解包概念:关联值. 3.可选值声明: 4.解包: 5.可选值作为参量生成的链. 6.可选值调用链. 最后做个总结 访问可选对象的属性或方法时,可以用 ? 号 访问可选对象的属 ...
- C#函数式编程之可选值
在我们的实际开发中已经会遇到可空类型,而在C#中自从2.0之后就提供了可空类型(Nullable<T>),普通的值类型是不可以赋值为NULL,但是在类型的后面加上问号就变成了可空类型,这样 ...
- 超链接a标签的属性target的可选值有哪些以及区别
超链接a标签的属性target的可选值有哪些以及区别 1.<a target="_blank"></a> 2.<a target="_par ...
随机推荐
- prim算法
最小生成树 一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边.最小生成树可以用kruskal(克鲁斯卡尔)算法或prim(普里姆)算法 ...
- IOS第17天(2,Quartz2D图片剪裁变圆行图,和截屏图片)
**** #import "HMViewController.h" #import "UIImage+Tool.h" @interface HMViewCont ...
- EditText中输入手机号码时,自动添加空格
输入手机号码时,自动添加空格,更容易辨别 public class PhoneWatcher implements TextWatcher { private EditText _text; publ ...
- C#整数三种强制类型转换int、Convert.ToInt32()、int.Parse()的区别
1.int适合简单数据类型之间的转换,C#的默认整型是int32(不支持bool型); 2.int.Parse(string sParameter)是个构造函数,参数类型只支持string类型; 3. ...
- 奥迪--Q5
-型号:Q5 -价格:40-53W -动力:2T -变速箱:8挡手自一体 -长宽高:4.63,1.90,1.66 -油箱:75L -发动机:EA888 -大灯:氙气
- Oracel数据库连接时出现:ORA-12518:监听程序无法分发客户机连
在连接Oracel数据库时,每隔一段时间就会出现:ORA-12518:监听程序无法分发客户机连接,如图 上网查了资料原因和解决方案如下: 一.[问题描述] 最近,在系统高峰期的时候,会提示如上的错误, ...
- [daily][archlinux][fonts] 在linux下管理字体
序: linux是社区搞出来, 商业应用也都是服务器场景.社区里又都是技术人员.字体又是细节.而且会英文早成了标配.所以没有很多社区以外的人力来搞字体这个毫无回报的东西. 结果很自然的,装linux桌 ...
- 关于js SDK的程序,java SDK的程序
一:JS SDK 1.修改配置workspace 2.导入 3.Demo.html <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Trans ...
- JavaAPI_01
>JavaAPI 文档注释可以在:类,常量,方法上声明 文档注释可以被javadoc命令所解析并且根据内容生成手册 package cn.fury.se_day01; /** * 文档注释可以在 ...
- Linux配置SSH免密码登陆
配置环境: 两台centos 6.4虚拟机,/etc/hosts配置如下 192.168.63.128 hadoop001 --master192.168.63.131 hadoop002 --sla ...