数据类型
发布时间:2026-10-28 | 浏览:1
字符串插值是一种从混合常量、变量、字面量和表达式的字符串字面量构造新 String 值的方法
每一个你插入到字符串字面量的元素都要被 一对圆括号包裹,然后使用反斜杠前缀
每一个 String 值都有相关的索引类型, String.Index,它相当于每个 Character 在字符串中的位置
startIndex:String 中第一个 Character 的位置。
endIndex:String中最后一个字符后一个的位置,endIndex 属性并不是字符串下标脚本的合法实际参数
如果 String 为空,则 startIndex 与 endIndex 相等
使用 index(before:) 和 index(after:) 方法来访问给定索引的前后
访问给定索引更远的索引,可以使用index(_:offsetBy:)
使用 indices 属性来访问字符串中每个字符的索引
实现 [@"hjdkhlfghdklfhdklfhnd" substringWithRange:NSMakeRange(5, 2)]
插入字符,使用 insert(_:at:) 方法
插入另一个字符串的内容到特定的索引,使用 insert(contentsOf:at:) 方法
• 移除字符,使用 remove(at:)方法
• 移除一小段特定范围的字符串,使用 removeSubrange(_:) 方法
使用下标或者类似 prefix(_:) 的方法得到的 子字符串 是 Substring 类型
Substring 拥有 String 的大部分方法
Substring 可以转成 String 类型
子字符串重用一部分原字符串的内存
修改字符串或者子字符串之前 都不需要花费拷贝内存的代价
String 和 Substring 都遵循 StringProtocol 协议,也就是说它基本上能很方便地兼容所有接受 StringProtocol 值的字符串操作函数
String 值在传递给方法或者函数的时候会被复制过去
赋值给常量或者变量的时候也是一样
Swift 编译器优化了字符串使用的资源,拷贝只会在需要的时候才进行
字符串和字符相等性(==和!=)
前缀相等性 hasPrefix(_:)
后缀相等性 hasSuffix(_:)
Character 和 String ¶
Character 和 String 是两个不同的类型,分别用于表示单个字符和一系列字符。
定义 : Character 表示单个字符,可以是一个字母、数字、符号或其他字符。
使用场景 :用于表示和操作单个字符。
存储 : Character 实际上是一个扩展的 Unicode 标量,可以表示任何有效的 Unicode 字符,包括由多个 Unicode 标量组成的字符(如一些 emoji)。
示例 : let char : Character = "A" let emoji : Character = "😊"
定义 : String 表示一系列字符的集合,可以包含零个或多个字符。
使用场景 :用于表示和操作文本。
存储 : String 是一个复杂的数据结构,支持高效的字符串操作,包含 Unicode 编码和字符串操作优化。
Character 表示单个字符。
String 表示一系列字符。
String 表示一系列字符。
Character 只能用单个字符初始化。
String 可以用零个、一个或多个字符初始化。
String 可以用零个、一个或多个字符初始化。
Character 主要用于表示和操作单个字符。
String 提供了丰富的字符串操作方法,如拼接、分割、查找、替换等。
字符串拼接 : let firstChar : Character = "H" let secondChar : Character = "i" let combinedStr : String = String ( firstChar ) + String ( secondChar ) // "Hi"
字符串拼接 : let firstChar : Character = "H" let secondChar : Character = "i" let combinedStr : String = String ( firstChar ) + String ( secondChar ) // "Hi"
字符遍历 : let greeting : String = "Hello" for char in greeting { print ( char ) // 依次打印 "H", "e", "l", "l", "o" }
字符遍历 : let greeting : String = "Hello" for char in greeting { print ( char ) // 依次打印 "H", "e", "l", "l", "o" }
检查字符是否在字符串中 : let searchStr : String = "Hello, World!" let searchChar : Character = "W" let containsChar = searchStr . contains ( searchChar ) // true
检查字符是否在字符串中 : let searchStr : String = "Hello, World!" let searchChar : Character = "W" let containsChar = searchStr . contains ( searchChar ) // true
使用 Character 来表示和操作单个字符。
使用 String 来表示和操作一系列字符或文本。
元组可以存储固定数量的各种类型的元素,而不需要创建自定义类。
元组把多个值合并成单一的复合型的值
元组内的值可以是任何类型,并且不必是同一类型
元组中的每一个元素可以指定对应的元素名称
如果没有指定名称的元素也可以使用下标的方式来引用
用var定义的元组是可变元组,let定义的是不可变元组
无论是可变还是不可变元组,元组在创建后就不能增加和删除元素
可以对可变元组的元素进行修改,但是不能改变其类型
可以将一个元组的内容分解成单独的常量或变量
如果只需要使用其中的一部分数据,不需要的数据可以用下划线 _ 代替
返回值的Tuple可以在函数的返回类型部分被命名
创建空数组的时候必须携带类型信息
如果内容已经提供了类型信息,比如说作为函数的实际参数或者已经分类了的变量或常量,你可以通过空数组字面量来创建一个空数组
无法使用 break 或 continue 跳出或者跳过循环 ,使用 return 只能退出当前一次循环的执行体。
For-In 同时得到索引和值 enumerated() ¶
使用 Iterator 遍历数组 ¶
startIndex 返回第一个元素的位置,对于数组来说,永远都是 0。
endIndex 返回最后一个元素索引 +1 的位置,对于数组来说,等同于count 。
如果数组为空,startIndex 等于 endIndex 。
indices 获取数组的索引区间 ¶
contains判断是否包含指定元素 ¶
contains(_:) 判断数组是否包含给定元素
contains(where:) 判断数组是否包含符合给定条件的元素
allSatisfy(_:) ¶
判断数组中的所有元素是否符合给定的条件
first 返回数组第一个元素(optional),如果数组为空,返回 nil 。
last 返回数组最后一个元素(optional),如果数组为空,返回 nil。
first(where:) 返回数组第一个符合给定条件的元素(optional)。
last(where:) 返回数组最后一个符合给定条件的元素(optional)。
firstIndex(of:) 返回给定的元素在数组中出现的第一个位置(optional)
lastIndex(of:) 返回给定的元素在数组中出现的最后一个位置(optional)
firstIndex(where:) 返回符合条件的第一个元素的位置(optional)
lastIndex(where:) 返回符合条件的最后一个元素的位置(optional)
min() 返回数组中最小的元素
max() 返回数组中最大的元素
min(by:) 利用给定的方式比较元素并返回数组中的最小元素
max(by:) 利用给定的方式比较元素并返回数组中的最大元素
append(_:) 在末尾添加一个元素
append(contentsOf: ) 在末尾添加多个元素
insert(_:at:) 在指定的位置插入一个元素
var array = [ 1 , 2 , 4 ] array . insert ( 3 , at : 2 ) // 现在数组是 [1, 2, 3, 4] - insert(contentsOf: at:) 在指定位置插入多个元素
ArraySlice 是数组或者其他 ArraySlice 的一段连续切片, 和原数组共享内存 。
当要 改变 ArraySlice 的时候,ArraySlice 会 copy 出来,形成单独内存 。
ArraySlice 拥有和 Array 基本完全类似的方法
通过 drop 得到 ArraySlice ¶
dropFirst(:) “移除”原数组前面指定个数的元素得到一个 ArraySlice
dropLast(:) “移除”原数组后面指定个数的元素得到一个 ArraySlice
drop(:) “移除”原数组符合指定条件的元素得到一个 ArraySlice
通过 prefifix 得到 ArraySlice ¶
prefifix() 获取数组前面指定个数的元素组成的 ArraySlice
prefifix() 获取数组前面指定个数的元素组成的 ArraySlice
prefifix(upTo: ) 获取数组到指定位置(不包含指定位置)前面的元素组成的 ArraySlice
prefifix(upTo: ) 获取数组到指定位置(不包含指定位置)前面的元素组成的 ArraySlice
prefifix(through: ) 获取数组到指定位置(包含指定位置)前面的元素组成的 ArraySlice
prefifix(through: ) 获取数组到指定位置(包含指定位置)前面的元素组成的 ArraySlice
prefifix(while: ) 获取数组前面符合条件的元素(到第一个不符合条件的元素截止)组成的 ArraySlice
通过 suffix 得到 ArraySlice ¶
suffix() 获取数组后面指定个数的元素组成的 ArraySlice
suffix(from: ) 获取数组从指定位置到结尾(包含指定位置)的元素组成的 ArraySlice
通过 Range 得到 ArraySlice ¶
通过对数组下标指定 Range 获取 ArraySlice,可以使用闭区间、半开半闭区间、单侧区间、甚至可以只使用 … 来获取整个数组组成的 ArraySlice 。
ArraySlice 转为 Array ¶
使用 Array(slice) 。
ArraySlice 和原 Array 相互独立 ¶
ArraySlice 和原 Array 是相互独立的,它们添加删除元素不会影响对方。
shuffle() 在原数组上将数组元素打乱,只能作用在数组变量上。
shuffled() 返回原数组的随机化数组,可以作用在数组变量和常量上。
reverse() 在原数组上将数组逆序,只能作用在数组 变量 上。
reversed() 返回原数组的逆序“集合表示”,可以作用在数组变量和常量上,该方法不会分配新内存空间
partition(by belongsInSecondPartition: (Element) throws -> Bool) 将数组以某个条件分组。
数组前半部分都是不符合条件的元素,数组后半部分都是符合条件的元素。
sort() 在原数组上将元素排序,只能作用于数组变量。
sorted() 返回原数组的排序结果数组,可以作用在数组变量和常量上。
joined() 拼接字符串数组里的所有元素为一个字符串
joined(separator:) 以给定的分隔符拼接字符串数组里的所有元素为一个字符串
元素为 Sequence 数组的拼接 ¶
joined() 拼接数组里的所有元素为一个更大的 Sequence
joined(separator:) 以给定的分隔符拼接数组里的所有元素为一个更大的 Sequence
Sequence -> Collection -> RangeReplaceableCollection -> Array
序列 (sequence) 代表的是一系列具有相同类型的值,可以对这些值进行迭代。
IteratorProtocol ¶
Sequence 通过创建一个迭代器来提供对元素的访问。迭代器每次产生一个序列的值,并且当遍历序列时对遍历状态进行管理。
当序列被耗尽时,next() 应该返回 nil 。
Collection 是满足下面条件的 Sequence
稳定的 Sequence,能够被多次遍历且保持一致
除了线性遍历以外,集合中的元素也可以通过下标索引的方式被获取到
和 Sequence 不同,Collection 类型不能是无限的
确定性 :给定一个集合,任给一个元素,该元素或者属于或者不属于该集合,二者必居其一。
互斥性 : 集合中任何两个元素都认为是不相同的,即每个元素只能出现一次。
无序性 : 集合中每个元素的地位都是相同的,元素之间是无序的。
集合类型写做 Set<Element> ,Element是Set要储存的类型。
使用初始化器语法来创建一个确定类型的空 Set
为了能让类型储存在 Set 当中,它必须是可哈希的——就是说类型必须提供 计算它自身哈希值 的方法。
所有 Swift 的基础类型(比如 String, Int, Double, Bool)默认都是可哈希的,并且可用于 Set 或者Dictionary 的键。
字典储存无序的、互相关联的 同一类型的键 和 同一类型的值 的集合
字典储存无序的、互相关联的 同一类型的键 和 同一类型的值 的集合
字典类型的全写方式 Dictionary ,简写方式 [Key: Value]
字典类型的全写方式 Dictionary ,简写方式 [Key: Value]
字典的 key 必须是可哈希的
字典的 key 必须是可哈希的
count 和 isEmpty ¶
count 属性:Dictionary 拥有多少元素
count 属性:Dictionary 拥有多少元素
isEmpty 属性:字典是否为空
isEmpty 属性:字典是否为空