整数
Swift 提供了 8,16,32 和 64 位编码的有符号和无符号整数
命名方式:例如 8 位无符号整数的类型是 UInt8 ,32 位有符号整数的类型是 Int32
通过 min 和 max 属性来访问每个整数类型的最小值和最大值
Swift 提供了一个额外的整数类型: Int ,它拥有与当前平台的原生字相同的长度
同时 Swift 也提供 UInt 类型,来表示平台长度相关的无符号整数
建议在用到整数的地方都使用 Int
浮点类型
Double:64 位浮点数,至少有 15 位数字的精度
Float:32 位浮点数,至少有 6 位数字的精度
在两种类型都可以的情况下,推荐使用 Double 类型。
数值范围
类型 | 大小字节数 | 区间值 |
---|---|---|
Int8 | 1 字节 | -128~127 |
UInt8 | 1 字节 | 0 到 255 |
Int32 | 4 字节 | -2147483648 到 2147483647 |
UInt32 | 4 字节 | 0 到 4294967295 |
Int64 | 8 字节 | -9223372036854775808 到 9223372036854775807 |
UInt64 | 8 字节 | 0 到 18446744073709551615 |
Float | 4 字节 | 1.2E-38 到 3.4E+38 (~6 digits) |
Double | 8 字节 | 2.3E-308 到 1.7E+308 (~15 digits) |
类型别名
- 你可以关键字 typealias 定义一个类型的别名
typealias u8 = UInt8
let data:u8 = 32
Tuple
- 元组把多个值合并成单一的复合型的值
- 元组内的值可以是任何类型,而且可以不必是同一类型
- 如果只需要使用其中的一部分数据,不需要的数据可以用下滑线( _ )代替
- 返回值的 Tuple 可以在函数的返回类型部分被命名
let errer = (1 , "no")
print(errer.0)
print(errer.1)
let errer1 = (errerCode:1,errerMessage:"no")
let error = (1,"no")
let (_,errorMes) = error
print(errorMes)
Optional
Objective-C 里的 nil 是无类型的指针
Objective-C 里面的数组、字典、集合等不允许放入 nil
Objective-C 所有对象变量都可以为 nil
Objective-C 只能用在对象上,而在其他地方又用其他特殊值(例如NSNotFound)表示值的缺失
-
通过在变量类型后面加 ? 表示:
- 这里有一个值,他等于 x
或者 - 这里根本没有值
- 这里有一个值,他等于 x
Optional-If 语句以及强制展开
- 可选项是没法直接使用的
- 需要用!展开之后才能使用(意思是我知道这个可选项里边有值,展开吧)
- 使用 ! 来获取一个不存在的可选值会导致运行错误,在使用!强制展开之前必须确保可选项中包含一个非 nil 的值
Optional-实现探究
Optional 其实是标准库里的一个 enum 类型
Optional.none 就是 nil
Optional.some 则包装了实际的值
-
泛型属性 unsafelyUnwrapped
- 理论上我们可以直接调用 unsafelyUnwrapped 获取可选项的值
字符串
- 多行字面量
- 多行字符串字面量是用三个双引号引起来的一系列字符
- 多行字符串字面量把所有行包括在引号内,开始和结束默认不会有换行符
- 当你的代码中在多行字符串字面量里包含了换行,那个换行符同样会成为字符串里的值。如果你想要使
用换行符来让你的代码易读,却不想让换行符成为字符串的值,那就在那些行的末尾使用反斜杠( \ )
字符串里的特殊字符
- 转义特殊字符 \0 (空字符), \ (反斜杠), \t (水平制表符), \n (换行符), \r(回车符), " (双引
号) 以及 ' (单引号) - 任意的 Unicode 标量,写作 \u{n},里边的 n 是一个 1-8 位的16 进制数字,其值是合法 Unicode 值
- 可以在多行字符串字面量中包含双引号( " )而不需转义。要在多行字符串中包含文本 """ ,转义至
少一个双引号
扩展字符串分隔符(Raw String)
- 在字符串字面量中放置扩展分隔符来在字符串中包含特殊字符而不让它们真的生效
- 把字符串放在双引号( " )内并由井号( # )包裹
- 如果字符串里有 "# 则首尾需要两个 ##
- 如果你需要字符串中某个特殊符号的效果,使用匹配你包裹的井号数量的井号并在前面写转义符号 \
字符串是值类型
String 值在传递给方法或者函数的时候会被复制过去
赋值给常量或者变量的时候也是一样
Swift 编译器优化了字符串使用的资源,实际上拷贝只会在确实需要的时候才进行