这篇中我们来学习一下int.float.double.char.
int
·Swift中,整数常量由一个或多个数字组成,可以有负号,例如:10,-10,999都是合法的。
·Swift规定,数字中不能插入空格或逗号,如 1,000 是不合法的。
如果整数常量以0和x开头,表示这个值是一个十六进制。由09和af组成,字母部分表示10~15 。如:0xf3f3f3。
// 直接赋值,系统自动判别数据类型
let number = 100
// 指定数据类型
let number1:Int = 100
// 多个值声明,用逗号隔开
let number2 , number3 , number4 :Int
float
·Swift中,float可以储存小数位的变量。
·Swift中,可以省略小数点之前的数字,也可以省略小数点后面的数字,但不能全部是省略。
·Swift中,可以使用柯旭计数法来表示浮点常量。例如:1.2e3,表示1.2 x 103。e之前的数称为尾数,e之后的数称为指数。
let float = 0.1
let float1:Float = 0.1
double
·Swift中,double类型与float类型类似。
·Swift中,规定当float变量中所提供的值域不能满足要求时,需使用double。double所储存的位数,大概是float的两倍多。
·Swift中,除非有特殊说明,否则编译器将浮点常量当做double值来对待。
char
·Swift中,char类型的作用是储存单个字符,将字符放到一堆单引号中就得到字符常量。如:'a','3'。
·Swfit中,字符常量只能用单引号括起来,不能用双引号或其他符号。
·Swift中,字符常量只能是单个字符,不能是字符串。
·Swfit中,字符可以是字符集中的任意字符,但数字被定义为字符后就不能参与数值运算,如'3'与3是不同的。
·在OC中,int float double之间可以直接运算,但在swift中是不被允许的。
整形
Swift整型包括以下 5 种类型:
⊙ Int8 : 在内存里通常占8位,表数范围是 -128 ~ 127 ( -2^7 ~ 2^7 —1)。
⊙ Int16 :在内存里通常占16位,表数范围是 -2^15 ~ 2^15 —1。
⊙ Int32: 在内存里通常占32位,表数范围是 -2^31 ~ 2^31 —1。
⊙ Int64 : 在内存里通常占64位,表数范围是 -2^63 ~ 2^63 —1。
⊙ Int : 这种类型并未专门指定整型的长度,Int型所占的内存空间与当前平台的原生字长相同,对于32位平台,Int型与Int32型的长度相同;对于64位平台,Int型与Int64型的长度相同。
除此之外,Swift还提供了无符号整数,在前面的介绍的5种类型前面添加U,即是无符号整数,如UInt8,UInt16,UInt32,UInt64,UInt。无符号整数没有负数,最大取值也比相应的有符号整数的最大取值大一倍加1。比如,UInt8 的取值范围就是 0 ~ 255。可以在程序中调用函数获取取值范围:
var umax = UInt16.max
var umin = UInt16.min
var max = Int16.max
var min = Int16.min
注意:一般来说,尽量避免使用无符号整数,开发过程中用Int即可,这样可以提高代码的一致性和可复用性。避免在不同的数值型之间进行转换,并可匹配数值的类型推断。
如果声明了一个变量或者常量时没有指定数据类型,只是简单地指定其初始值为整数值,那Swift会自动判断该变量的类型为Int类型。
Swift的整数数值有4种表达方式:
十进制:最普通的整数就是十进制的整数(没有任何前缀)。
二进制:以0b开头的整数就是二进制的整数。
八进制:以0o开头的整数就是八进制的整数。
十六进制:以0x开头的整数就是十六进制的整数。其中10 ~15 分别以a ~ f(不区分大小写)来表示。图示为不同进制数表示17
为了提高数值(包括浮点型)的可读性,Swift允许为数值增加下画线作为分隔符,也可以在数值前添加额外的零。这些下画线和零不会影响数值本身。例如:
let thousand = 1_000 (等价于 let thousand = 1000 )
let score = 0080.12 (等价于let score = 80.12)
浮点型
浮点型是可以包含小数部分的数值,浮点型比整型的表数范围更大,可以存储比Int更大或者更小的数。Swift有2种浮点型:
Double : 表示64位的浮点型,当程序要求存储很大或者高精度的浮点数时使用这种类型。
Float : 表示32位的浮点型,当程序要求不高时可以使用这种类型。
注意:
Double 精确到小数点后15位,Float精确到小数点后6位。具体选择哪种类型视具体情况而言。如果两种类型都可以的话,倾向于Double。
如果声明了一个变量或者常量,没有指明是Float还是Double,那么Swift会推断是Double类型的。这也是在两种类型都可用的情况下,推荐选择Double的原因。
Swift的浮点数的3种表示形式:
十进制数形式:平常的浮点数(没有前缀),比如 5.2 , 3.1415 , 10.0等
十六进制数形式 :必须以0x为前缀, 且需要用p(不分大小写)表示指数部分,其中p代表乘以2的p次方 。比如:
0xFp2 = 15 x 2^2 = 60.0 , 0xFp-2 = 15 x 2^-2 = 3.75
科学计数形式 : 以e(不区分大小写)表示指数部分,e代表10的e次方。比如:
0xFp2 = 15 x 2^2 = 60.0 , 0xFp-2 = 15 x 2^-2 = 3.75
布尔型
布尔型只有一个Bool类型,用于表示逻辑上的“真”或“假”。在Swift语言中,Bool类型的数值只能是true 或者 false,不能用0或者非0来表示。其他数据类型的值也不能转换成Bool类型。
如果在声明变量或者常量的时候设置了初始值为true或者false,就不必再进行类型声明。Swift会根据类型推断得到变量或者常量的类型。
Bool 类型的值或者变量主要用在流程控制中,主要有以下4种:
if条件控制语句,
while循环控制语句,
do while循环控制语句,
for循环控制语句
Bool类型的变量和值还可以用在三目运算符中使用。在运算符那一节会仔细讲解。
在Objective-C中,官方建议将Bool属性的getter方法命名为isXXX的形式,Swift中由于只是将原有的Objective-C框架进行Swift转换,所以这个规则在之前是Swift中并没有体现。在Swift3.0中,这个规则被再次应用,所有的Bool类型都重新命名为isXXX,所以以后我们的自定义中Bool属性的命名也应该体现这个规则。
1.数值型间类型转换
不同整型的变量支持的表数范围是不同的。如果超过了其范围,编译器就会报错,如下图所示:
这时就要进行类型转换,需要注意的是要选择合适的类型。
Swift要求不同类型的变量或者值之间必须进行显式转换。
声明了两个不同类型的常量,然后相加,是会报错的,因为不同类型的数值之间不能进行运算,这时就需要进行显式的类型转换。
例如:
let appleprice : UInt8 = 100
let oriangeprice : UInt16 = 200
let allprice = UInt16(appleprice) + oriangeprice
2.浮点型与整型之间的转换
Swift的Float、Double之间需要进行显示转换,浮点型与整型之间也需要类型转换,转换过程与之前的整型之间的转换过程一样,需要在变量面前添加要转换的类型。
例如:
var pi = 3.14
var b = 10
var sum2 = pi + Double(b)
元组
元组(Tuple)使用圆括号把多个值组合成一个复合值,元组内的值可以使用任意类型,并不要求元组内的值有相同类型。
1.定义元组类型的变量
(1)使用初始值定义元组变量
例如:定义一个info变量,并指定初始值
let info = (“HAHA",18,"男",90.5)
Swift根据初始值,推断该变量的类型是(String,Int,Double)。这种用圆括号将String,Int,Double括起来作为整体的形式称为元组,该元组可以被称为“一个类型为(String,Int,Double)的元组”。
(2)使用元组类型来定义元组变量
例如:
var score:(Int,String,Double)
赋值的时候要严格按照定义的类型来:
score = (90,“及格”,88.5)
(3)使用元组来定义元组
例如:
var test:((Int,String),(Int,Double))
test = ((100,"Hello") , (90, 80.5))
2.获取元组中的元素值
(1)Swift允许通过下标来访问元组的单个元素—元组的下标是从0开始,然后是1,2……依此类推。
例如:
let info = (“HAHA",18,"男",90.5)
print(“该学生的姓名是:\(info.0)") //输出结果 该学生的姓名是:HAHA
print(“该学生的年龄是:\(info.1)") // 输出结果 该学生的年龄是:18
获取上面的test元组的第二个元素的第一个元素可以写为:
print(test.1.0)
test.1是可以获取test的第二个元素,这个元素又是一个元组,依然是根据下标来获取元素的值。
(2)Swift允许将元组的元素拆分成单个的常量或者变量,然后即可正常使用这些常量或者变量。
例如:
var (name,age,sex,score) = info
print(“姓名:\(name),年龄:\(age),性别:\(sex),数学成绩:\(score)")
输出结果: 姓名:HAHA,年龄:18,性别:男,数学成绩:90.5
(3)如果程序只需要部分元素,被忽略的部分可以用下划线 _ 代替。
例如:
var (name,_,_,score) = info
print(“姓名:\(name) ,数学成绩:\(score)")
3.为元组中的元素命名
(1)为元组的每个元素都指定名字。
声明student变量,并为每个元素定义一个变量名,例如:
var student = (name:”HAHA",height:188,mathScore:100)
(2)可以为元组中的数据类型命名,例如:
var score : (math:Int,science:Float)
这样的话,必须按照顺序为每个元素指定值,例如:
score = (98,70.6)
//通过key为元组的元素指定值,这种方式下,元组内各元素顺序可以调换
score = (science:70.6,math:98)
可以使用这种key:value(键值对)的形式来定义元组。相当于给元组的每个元素都指定名字。
综上,如果定义元组变量时为元素指定了名字,那么为元素变量指定值有两种形式:
(1)简单通过圆括号将多个元素值组合在一起,这种方式下,元组内各元素的顺序必须与定义元组变量时指定的顺序保持一致。
(2)通过元素名为元组内各元素指定值,这种方式下,元组内各元素的顺序可以随意调换。
为元组的元素指定了名字,就可以通过元素名来获取元素值:
print(score.math)
输出结果: 98
元组是很实用的一种数据类型,在函数那一节会用元组作为函数的返回值。
字符串
Swift使用String来代表字符串。将多个字符放在双引号中引起来就可以组成字符串。(不像Objective-C的字符串,需要在前面添加@)
例如:
var name = "Lucky"
var sex = "女"
1.创建空字符串
a) var emptyStr = ""
b)var emptyStr2 = String()
这两种方式都可以创建空字符串。String本质上是结构体,所以可以采用第二种方式进行创建。
Swift提供 isEmpty属性来检查字符串是否为空 。
字符串可以用+号将两个字符串拼接起来。
var variableString = "可变的"
variableString += "字符串"
print(variableString)//输出 可变的字符串
var welcome = "Hello"
var language = "Swift"
print(welcome+language)
//输出 HelloSwift
Swift 的String 与Foundation的NSString类可以进行无缝桥接,只要程序需要NSString的地方都可以直接传入String作为替换。
在Swift中用NSString的类的时候,需要导入Foundation框架。
需要注意的是,Swift的String是一个结构体,因此它是一种值类型,而Foundation框架中的NSString是一个类,因此它是一种引用类型(指针类型)。
2.可变字符串
var声明的字符串为可变字符串,let声明的字符串为不可变字符串。