switf-基础03-类型安全与类型引用

来源:互联网 发布:lol域名 编辑:程序博客网 时间:2024/06/03 21:23


    Swift 是一种类型安全(type safe )的语言。

    类型安全的语言会让你更清楚代码中可以使用的值的类型。

    如果你的代码预期一个String,你绝不能误入一个Int

    

    因为 Swift是类型安全的,编译器编译你的代码时会执行类型检查(type checks)

    并标记出任何不匹配的类型错误。这使你在开发过程中能够尽早捕获并修复错误。

    

    当你使用不同类型的值时,类型安全检查可以帮助你避免错误。

    当然,这并不意味着你必须为每一个常量和变量显示地指定类型。

    如果你没有显示地指定类型,Swift会进行类型推测(type inference),选择出适当的类型。

    类型推测就是编译器在编译代码时能够推断出特定的表达式的类型,主要是根据所提供的值进行推测。

    

    因为类型推测,所以 Swift C Objective - C需要更少的类型声明。

    虽然常量和变量需要明确类型,但大部分的工作不需要你来做。

    

    类型推测是特别有用的,当你声明一个常量或变量并初始值的时候,即触发类型推测。

    

    例如,你给一个常量赋值42,但没有标明类型,

    Swift 可以推测出常量类型是Int,因为你给它赋的值看起来像一个整数:


    var myAppleCount = 42

    myAppleCount++

    

    同样的,如果你不指定一个常量为浮点类型,Swift 推断出你想要的是Double类型

    var pi = 3.1415926

    pi = pi * 1

    

    如果你把整数和浮点数同时用在表达式中,Swift 会推测为Double 类型:

    数字 3 没有显式的类型,而表达式中出现了一个浮点数,因此,表达式被推测为 Double类型

    let another = 3 + 0.00222

    pi = another

    

    数字类型字面值

    整数字面值可以写为:

    一个十进制数,没有前缀

    一个二进制数,前缀是 0b

    一个八进制数,前缀是 0o

    一个十六进制数,前缀是 0x

    下面的所有整数面值的十进制值都是17:

    var decimalInteger = 17

    var binaryInteger = 0b10001

    var octalInteger = 0o21

    var hexadecimalInteger = 0x11

    

    print(decimalInteger)

    print(binaryInteger)

    print(octalInteger)

    print(hexadecimalInteger)

    

    浮点数面值可以是十进制(没有前缀),或者是十六进制(0x前缀)

    但必须有至少一个十进制数字(或十六进制数)在小数点两侧。

    

    浮点数面值还有一个可选的指数(exponent),在十进制浮点数中通过大写或者小写的e来表示,

    在十六进制浮点数中通过大写或者小写的p来表示。

    如果一个十进制数的指数为exp,那这个数相当于基数和10^exp10exp次方)的乘积:

    1.25e2 表示 1.25×10^2,等于 125.0

    1.25e-2 表示 1.25×10^-2,等于 0.0125

    如果一个十六进制数的指数为exp,那这个数相当于基数和2^exp(2exp次方)的乘积:

    0xFp2 表示 15×2^2,等于 60.0

    0xFp-2 表示 15×2^-2,等于 3.75

    下面的这些浮点字面量都等于十进制的12.1875

   

    var decimalDouble = 12.1875

    var exponentDouble = 1.21875e1

    var hexadecimalDouble = 0xC.3p0

    

    print(decimalDouble)

    print(exponentDouble)

    print(hexadecimalDouble)

    

    数值类面值可以包括额外的格式来增强可读性。整数和浮点数都可以添加额外的零并且包含下划线,这不会影响字面量

    

    let paddedDouble = 000123.456

    let oneMillion :Double =1_000_000

    let justOverOneMillion = 1_000_000.000_000_1

    

    print(paddedDouble)

    print(oneMillion)

    print(justOverOneMillion)

    

 

0 0