Swift(2)基本数据类型

作者: NSL_zerom | 来源:发表于2018-03-19 11:00 被阅读46次
    这篇中我们来学习一下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)基本数据类型

        本文链接:https://www.haomeiwen.com/subject/iqvuqftx.html