04_Swift2基础之类型安全和类型推测+字面量+类型别名

1. 类型安全和类型推测

 1> 类型安全  

  Swift 是一个 _类型安全(type safe)_ 的语言。类型安全的语言可以让你清楚地知道代码要处理的值的类型。如果你的代码需要一个`String`,你绝对不可能不小心传进去一个`Int`。

  由于 Swift 是类型安全的,所以它会在编译你的代码时进行 _类型检查(type checks)_ ,并把不匹配的类型标记为错误。这可以让你在开发的时候尽早发现并修复错误。

  当你要处理不同类型的值时,类型检查可以帮你避免错误。然而,这并不是说你每次声明常量和变量的时候都需要显式指定类型。

 2> 类型推测

  如果你没有显式指定类型,Swift 会使用 _类型推测(type inference)_ 来选择合适的类型。有了类型推测,编译器可以在编译代码的时候自动推测出表达式的类型。原理很简单,只要检查你赋的值即可。

  因为有类型推测,和 C 或者 Objective-C 比起来 Swift 很少需要声明类型。常量和变量虽然需要明确类型,但是大部分工作并不需要你自己来完成。

  当你声明常量或者变量并赋初值的时候类型推测非常有用。当你在声明常量或者变量的时候赋给它们一个_字面量(literal value 或 literal)_ 即可触发类型推测。(字面量就是会直接出现在你代码中的值,比如`42`和`3.14159`。)

  ① 如果你给一个新常量赋值`42`并且没有标明类型,Swift 可以推测出常量类型是`Int`,因为你给它赋的初始值看起来像一个整数:

   let meaningOfLife = 42

   // meaningOfLife 会被推测为 Int 类型

  ② 如果你没有给浮点字面量标明类型,Swift 会推测你想要的是`Double`:

     let pi = 3.14159

   // pi 会被推测为 Double 类型

   当推测浮点数的类型时,Swift 总是会选择`Double`而不是`Float`。

  ③ 如果表达式中同时出现了整数和浮点数,会被推测为`Double`类型:

   let anotherPi = 3 + 0.14159

   // anotherPi 会被推测为 Double 类型

   原始值`3`没有显式声明类型,而表达式中出现了一个浮点字面量,所以表达式会被推测为`Double`类型。

2. 数值型字面量

 1> 整数字面量可以被写作:

  * 一个十进制数(decimal),没有前缀

  * 一个二进制数(binary),前缀是`0b`

  * 一个八进制数(octal),前缀是`0o`

  * 一个十六进制数(hexadecimal),前缀是`0x`

  例: 下面的所有整数字面量的十进制值都是`17`:

1   let decimalInteger = 17
2
3   let binaryInteger = 0b10001       // 二进制的17
4
5   let octalInteger = 0o21           // 八进制的17
6
7   let hexadecimalInteger = 0x11     // 十六进制的17

 2> 浮点数字面量

  ① 浮点字面量可以是十进制(没有前缀)或者是十六进制(前缀是`0x`)。小数点两边必须有至少一个十进制数字(或者是十六进制的数字)。

  ② 浮点字面量还有一个可选的 _指数(exponent)_ ,在十进制浮点数中通过大写或者小写的`e`来指定,在十六进制浮点数中通过大写或者小写的`p`来指定。

   如果一个十进制数的指数为`exp`,那这个数相当于 基数和$10^{exp}$的乘积:

    * `1.25e2` 表示 $1.25 × 10^{2}$,等于 `125.0`。

    * `1.25e-2` 表示 $1.25 × 10^{-2}$,等于 `0.0125`。

   如果一个十六进制数的指数为`exp`,那这个数相当于 基数和$2^{exp}$的乘积:

    * `0xFp2` 表示 $15 × 2^{2}$,等于 `60.0`。

    * `0xFp-2` 表示 $15 × 2^{-2}$,等于 `3.75`。

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

      let decimalDouble = 12.1875

      let exponentDouble = 1.21875e1

      let hexadecimalDouble = 0xC.3p0

 3> 额外的格式

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

   let paddedDouble = 000123.456

   let oneMillion = 1_000_000

   let justOverOneMillion = 1_000_000.000_000_1

3. 类型别名

 _类型别名(type aliases)_ 就是给现有类型定义另一个名字。你可以使用`typealias`关键字来定义类型别名。

 当你想要给现有类型起一个更有意义的名字时,类型别名非常有用。假设你正在处理特定长度的外部资源的数据:

  typealias AudioSample = UInt16

 定义了一个类型别名之后,你可以在任何使用原始名的地方使用别名:

  var maxAmplitudeFound = AudioSample.min

  // maxAmplitudeFound 现在是 0

  本例中,`AudioSample`被定义为`UInt16`的一个别名。因为它是别名,`AudioSample.min`实际上是`UInt16.min`,所以会给`maxAmplitudeFound`赋一个初值`0`。

时间: 2024-10-25 13:46:30

04_Swift2基础之类型安全和类型推测+字面量+类型别名的相关文章

10.typescript-字符串字面量类型

1.字符串字面量类型 字符串字面量类型是用来约束取值只能是某几个字符串中的一个. 1 // html 2 <div id="div">my name is Mr.</div> 1 type name = "wei" | "ze" | "yang"; 2 3 function student(ele:Element, event:name){ 4 return () => { 5 return el

go 的数变量类型和字面量的对应关系

java中我们知道   字节就用byte  字符就用char   整型就用  int  long  浮点就 float double 初学go ,类型怎么用就晕菜了 ,下面给出   go 的数变量类型和字面量的对应关系 希望可以少点疑惑 字面常量种类 变量的类型 布尔 bool 字符 rune 整型 int 浮点 float64 复数 complex128 字符串 string

Objective-c 字面量

#import <Foundation/Foundation.h> int main (int argc, const char * argv[]){ /** 以下为基本类型字面量举例 */ int a = 10; // 10为一个整型字面量 float f = 0.5f; // 0.5f为一个单精度浮点数字面量 double d = 3.14; // 3.14为一个双精度浮点数字面量 long l = 100000L; // 100000L为一个长整型字面量 char c = 'c'; //

java基本数据类型的字面量

java的基本数据类型一共有8种.其中:(每种类型后面列出了java中的该类型的字面量) 四种整型: int  4字节: 12  +12  -12  077 0xFF  0b101(JDK7中支持的二进制表示)  字面范围:0x800000000 --> 0x7FFFFFFF short  2字节: 2个字节内的int字面量可以认为是short类型的字面量,可以给short变量赋值  字面范围:(short)0x8000 -->  0x7FFF long 8字节:    int字面量形式后加字

编程语言中的字面量在Objective-C中的举例

关于计算机编程语言中的字面量的介绍可参考:http://baike.baidu.com/view/1208327.htm?fr=aladdin. 下面就介绍Objective-C中的各种常用字面量: #import <Foundation/Foundation.h> int main (int argc, const char * argv[]) { /** 以下为基本类型字面量举例 */ int a = 10; // 10为一个整型字面量 float f = 0.5f; // 0.5f为一个

字面量语法的使用--IOS

使用oc时,经常会用到NSString,NSNumber,NSArray,NSDictionary,下面是关于他们的字面量语法的使用. (1)字面数值 有时需要把整数,浮点数,布尔值封入oc对象中 一般写法: NSNumber *num = [NSNumber numberWithInt:1]; 使用字面量语法: NSNumber *num = @1; 其他类型使用字面量语法: NSNumber *[email protected]; NSNumber *[email protected]; N

TS(6)-- 类型推论、类型兼容性、高级类型

2019-11-09: 学习内容:类型推论.类型兼容性.高级类型 一.类型推论:类型是在哪里如何被推断的 在有些没有明确指出类型的地方,类型推论会帮助提供类型.如:let x = 3;  变量x的类型被推断为数字. 这种推断发生在初始化变量和成员,设置默认参数值和决定函数返回值时.大多数情况下,类型推论是直截了当地. 最佳通用类型:如: let x = [0, 1, null];   两种选择:number 和 null , 计算通用类型算法会考虑所有的候选类型,并给出一个兼容所有候选类型的类型

C++11 用户自定义字面量

[1]为什么引入用户自定义字面量? 在C/C++程序中,常常会使用结构体或者类来创造新的类型,以满足实际的需求. 比如,在进行科学计算时,用户可能需要用到复数(通常会包含实部和虚部两部分). 对于颜色,用户通常会需要一个四元组(三原色及Alpha). 对于奥运会组委会,他们则常常会需要七元组(标示来自七大洲的状况)等等. 而当用户想声明一个自定义类型的“字面量”(literal)时,尤其显得麻烦.如下示例: 1 #include <iostream> 2 using namespace std

Swift编程语言学习——类型安全和类型推测

Swift 是一种类型安全(type safe )的语言.类型安全的语言可以让你清楚地知道代码要处理的值的类型.如果你的代码需要一个String,你绝对不可能不小心传进去一个Int. 由于 Swift 是类型安全的,所以它会在编译你的代码时进行类型检查(type checks),并把不匹配的类型标记为错误.这可以让你在开发的时候尽早发现并修复错误. 当你要处理不同类型的值时,类型检查可以帮你避免错误.然而,这并不是说你每次声明常量和变量的时候都需要显式指定类型.如果你没有显式指定类型,Swift