Swift(2)基本数据类型

这篇中我们来学习一下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.数值型间类型转换

不同整型的变量支持的表数范围是不同的。如果超过了其范围,编译器就会报错,如下图所示:


nNRPXJw6KE86PypL.png!thumbnail.png

这时就要进行类型转换,需要注意的是要选择合适的类型。

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声明的字符串为不可变字符串。

你可能感兴趣的:(Swift(2)基本数据类型)