Swift5.1—子字符串

简介: Swift5.1—子字符串

当你从字符串中获取一个子字符串——例如,使用下标或者prefix(_:)之类的方法——就可以得到一个SubString的实例,而非另外一个String。Swift里的SubString绝大部分函数都跟String一样,意味着你可以使用同样的方式去操作SubString和String。然而,跟String不同的是,你只有在短时间内需要操作字符串时,才会使用SubString。当你需要长时间保存结果时,就把SubString转化为String的实例。


let greeting = "Hello,world!"
let index = greeting.firstIndex(of:",")??greeting.endIndex
let beginning = greeting[..<index]
//beginning的值为“Hello”
//把结果转化为String以便长期存储
let newString = String(beginning)


就像String,每一个SubString都会在内存里保存字符集。而String和SubString的区别在于性能优化上,SubString可以重用原String的内存空间,或者另一个SubString的内存空间(String也有同样的优化,但如果两个String共享内存的话,它们就会相等)。这一优化意味着你在修改String和SubString之前都不需要消耗性能去复制内存。就像前面说的那样,SubString不适合长期存储--因为它重用了原String的内存空间,原String的内存空间必须保留直到它的SubString不再被使用为止。


上面的例子,greeting是一个String,意味着它在内存里有一片空间保存字符集。而由于beginning是greeting的SubString,它重用了greeting的内存空间。相反,newString是一个String——它是使用SubString创建的,拥有一片自己的内存空间。


下面的图展示了他们之间的关系:



2466108-37523c2087a57a60.webp.jpg


注:String和SubString都遵循


StringProtocol协议,这意味着操作字符串的函数使用StringProtocol会更加方便。你可以传入String或SubString去调用函数。

目录
相关文章
|
9月前
|
编译器 Swift iOS开发
10 Swift中的字符串
Swift中的字符串
55 0
|
Java Swift iOS开发
Swift - 字符串
Swift - 字符串
92 0
|
Swift 索引
Swift实用小册03:字符串的使用
Swift实用小册03:字符串的使用
199 0
Swift实用小册03:字符串的使用
|
存储 Swift
Swift5.1—字符串的Unicode表示形式
Swift5.1—字符串的Unicode表示形式
398 0
Swift5.1—字符串的Unicode表示形式
|
编译器 Swift
Swift5.1—字符串字面量
Swift5.1—字符串字面量
132 0
Swift5.1—字符串字面量
|
Swift
swift微博第2天(命名空间和控制器字符串)
swift微博第2天(命名空间和控制器字符串)
122 0
swift微博第2天(命名空间和控制器字符串)
【Swift4】(2) 运算符 | 字符串
【Swift4】(2) 运算符 | 字符串
109 0
Swift5.1—字符串前缀/后缀相等
Swift5.1—字符串前缀/后缀相等
244 0
|
Swift
Swift5.1—比较字符串
Swift5.1—比较字符串
600 0
|
Swift 索引
Swift5.1—访问和修改字符串
Swift5.1—访问和修改字符串
243 0