第二章 量值和基本数据类型
Swift 支持的基本数据类型, 整型,浮点型,布尔型,元组,可选类型。
学习的目标:
常量与变量的意义、声明、命名规范、类型
数据进制与计算机存储原理
整型数据、浮点型数据、布尔型数据的应用
swift语言中的元祖类型和可选类型。
如何为类型取别名
2.1 变量与常量
在swift语言中,使用let关键字和var关键字分别用来表示常量和变量。
2.1.1 变量与常量的定义和使用
// 定一个一个变量,赋值字符串
var str = "Hello, swift!";
// 1 声明字符串变量str
var str: String;
// 2 对字符串变量str进行赋值
str = "Hello, Swift!";
// 更改str变量的值
str = "new value";
// 在str字符串变量后边追加hello
str = str + "hello";
Swift是一种类型安全语言,即常量或变量在声明的时候必须指明明确的类型。 Xcode编译器支持对Swift语言的类型自动推断,当声明变量时如果直接给变量赋 初值,则编译器会根据赋值的类型来确定变量的类型,之后变量的类型将不可更改。
Swift语言支持在同一行语句中声明多个常量或者变量,但是要遵守明确类型的原则。
// 编译器推断
var a = 1, b = 2.9, c = "String";
// 手动指定
var a2: Int = 1, b2: Float = 2.9, c2: String = "String";
如果在同一句代码中声明多个变量并且没有提供初始值,可以通过指定最后一个变量的类型
对整体进行类型指定。
// 声明3个Int类型的变量
var one, two, three: Int;
如果需要修改变量的值,直接对变量再赋值即可。需要注意的是,所赋值的类型
必须和变量的类型保持一致。
2.1.2 变量和常量的命名规范
在Swift语言中,常量和变量的命名规则十分广泛,可以包括Unicode字符和数字,
需要注意的是,不可使用预留关键字来作为常量或者变量的名称。
常量和变量的命名不可以数字开头,空格、数学符号、制表符、箭头符号也不可以用在命名中。
可以使用中文命名,可以使用表情符号进行命名,可以使用穿插数字进行命名。
// 使用中文进行变量的命名
var 汉字 = "汉字";
// 使用表情符号进行命名
var = "哈哈哈";
// 含有数字的命名
var pen2 = "pencile";
// 可以使用下划线进行命名
var _swift_ = "Swift";
Swift语言官方文档采用 驼峰命名的方式,所谓驼峰命名,是指,以单词进行名称的拼接。
名称的首字母一般为小写,之后每个单词的首字母大写,其他字母均小写。
// 驼峰命名
var userName = "汉字";
Swift中的命名也有一些约定俗称的规则,例如量值属性首字母会小写,类名,枚举名,结构体名首字母会大写。
如果在命名中真的需要使用预留的关键字进行命名,可使用 ` 符号进行包装,
但是如非万不得已,开发中应尽量不使用这种方式命名。
// 用预留关键字进行命名
var `var` = 2;
2.3 初识基本数据类型
2.3.1 数学进制与计算机存储原理
Swift语言支持开发者使用多种进制进行数据的定义与计算,默认为10进制,如果有特殊需求,
可以通过在数据前面加前缀的方式实现。
var type_10 = 17;
var type_2 = 0b10001;
var type_8 = 0o21;
var type_16 = 0x11;
1B = 8bit
1KB = 2^10B
1MB = 2^10KB
1GB = 2^10MB
1TB = 2^10GB
1PB = 2^10TB
2.3.2 整型数据
Swift语言中的整型数据分为有符号整型数据和无符号整型数据。
// 8位无符号整型的最大值 255
var a1 = UInt8.max;
// 16位无符号整型的最大值 65535
var a2 = UInt16.max;
// 32位无符号整型的最大值 4294967295
var a3 = UInt32.max;
// 32位无符号整型的最大值
var a4 = UInt64.max;
Swift语言中的无符号整型实际有五种,还有一种Unint类型,这种类型编译器会自动适配,在64位的机器上位
UInt64, 在32位上为Uint32.
// 获取数据类型所占位数,在64位机器砂锅UInt占8字节64位
var a5 = MemoryLayout
var maxInt8 = Int8.max;
var minInt8 = Int8.min;
var maxInt16 = Int16.max;
var minInt16 = Int16.min;
var maxInt32 = Int32.max;
var minInt32 = Int32.min;
var maxInt64 = Int64.max;
var minInt64 = Int64.min;
var intSize = sizeof(Int);
2.3.3 浮点型数据
var b = MemoryLayout
var b1 = MemoryLayout
var b2 = MemoryLayout
var b3 = MemoryLayout
var c = MemoryLayout
Swift 语言中也支持使用科学计数法来表示数字,在十进制中使用e来表示10的n次方
在16进制中使用p来表示2的n次方。
var sum = 1.25e3;
var sum2 = 0x1p3;
Swift语言中,无论是整型数据还是浮点型数据,都可以在数字前加任意个0
来进行位数填充,也可以在数字中加入下划线进行分隔,进而增加可读性,
这些操作并不会影响原始数据,却提高了对开发者的编程友好型,使代码的结构更加清爽 。
var num1 = 001.23; // 1.23
var num2 = 1_000; // 1000
var num3 = 1_000.1_001; // 1000.1001
2.3.4 布尔型数据
var bool1 = true;
var bool2 = false;
2.4 两种特殊的基本数据类型
Swift语言还支持两种特殊的基本数据类型,分别是元组类型和可选类型。
2.4.1 元组
var pen: (name: Stirng, price: Int) = ("钢笔", 2);
// 获取pen变量的名称
var name = pen.name;
// 获取pen变量的价格
var price = pen.price;
开发者在创建元组时,也可以在不指定元组中参数的名称,元组会自动位每个参数分配下标,
下标值将从0开始依次递增。
// 不指定参数名称的元组
var car: (String, Int) = ("甭吃", 20000);
// 通过下标来获取元组中每个组成元组的值
var carName = car.0;
var carPrice = car.1;
元组实例被创建后,开发者也可以通过指定变量或者常量来分解它。
// 不指定参数名称的元组
var car: (String, Int) = ("甭吃", 200000);
// 进行元组的分解
var (theName, thePrice) = var;
print(theName, thePrice);
var (theName, _) = car;
print(theName);
在Swift语言中,常常使用符号__来表示匿名的概念,因此,__ 也被称为匿名表示标识符。
2.4.2 可选类型
Swift语言中提供了一种包装的方式来对普通类型记性Optional包装,实现对空值情况的监控。
如果一个变量在逻辑上可能位nil, 则开发者需要将其包装位Optional类型。
var obj: String?;
if obj == nil {}
在声明obj变量的时候,这里将其声明为String?类型,在普通类型后面添加符号?
即可将普通类型包装为Optional类型。
Optional类型不会独立存在,总会依附于某个具体的数据类型智商,具体的数据
类型可以是基本数据类型,可以是结构体,也可以是类。
Optional类型只有两种值,可以理解为:
- 如果其依附于类型对应的量值有具体的值,则其为具体值的包装。
- 如果其依附于类型对应的量值没有具体的值,则为nill。
Optional类型是对普通类型的一种包装,因此在使用的时候也需要对其进行拆包操作,
拆包将使用Swift中的操作符!。
!符号出现在类型后面与实例后面,它出现在类型后面代表的是一种隐式解析的语法结构。
// 声明obj为String?类型
var obj: String? = "HS";
// 进行拆包操作
obj!
在使用!进行Optional值的拆包操作时,必须保证要拆包的值不为nill。
否则程序运行会出错。可以在拆包前使用if语句进行安全判断。
var obj: String? = "HS";
if obj != nill {
obj!
}
var obj: String? = "HS";
if let tmp = obj {
print(tmp)
} else {
obj = "HS";
print(obj!);
}
Swift语言还提供了一种if-let语法结构来进行Optional类型的值的绑定操作。
if-let结构中也可以同时进行多个Optional类型的值的绑定,之间逗号隔开。
var obj1: Int? = 1;
var obj2: Int? = 2;
if let tmp1 = obj1, let tmp2 = obj2 {
print(tmp1, tmp2);
}
如果开发者需要在if语句的判断中添加更多的业务逻辑,可以通过追加子句的方式来实现。
var obj1: Int? = 1;
var obj2: Int? = 2;
if let tmp1 = obj1, let tmp2 = obj2, tmp1 < tmp2 {
print(tmp1, tmp2);
}
2.5 为类型取别名
在Swift语言中使用typealias关键字来实现类型别名的效果。
typealias Price = Int;
var penPrice: Price = 100;
手机扫一扫
移动阅读更方便
你可能感兴趣的文章