Swift4 斯威夫特 4
字符串在 Swift 4 中得到了很大的改进.当你现在从字符串中获取一些子字符串时,你会返回一个 Substring
类型而不是 String
.为什么是这样?字符串是 Swift 中的值类型.这意味着如果你使用一个 String 来创建一个新的,那么它必须被复制.这有利于稳定性(没有其他人会在您不知情的情况下对其进行更改),但对效率不利.
另一方面,子字符串是对它来自的原始字符串的引用.这是 .子字符串(作为一种类型)是短暂的.
Swift 4 的另一个重大改进是字符串是集合(再次).这意味着无论您可以对 Collection 做什么,您都可以对 String 做(使用下标、迭代字符、过滤器等).
以下示例展示了如何在 Swift 中获取子字符串.
获取子串
您可以使用下标或许多其他方法(例如,prefix
、suffix
、split
)从字符串中获取子字符串).不过,您仍然需要对范围使用 String.Index
而不是 Int
索引.(如果您需要帮助,请参阅我的其他答案.)
字符串的开头
您可以使用下标(注意 Swift 4 的单边范围):
let index = str.index(str.startIndex, offsetBy: 5)
let mySubstring = str[..<index]//你好
或前缀
:
let index = str.index(str.startIndex, offsetBy: 5)
let mySubstring = str.prefix(upTo: index)//你好
甚至更简单:
let mySubstring = str.prefix(5)//你好
字符串结束
使用下标:
let index = str.index(str.endIndex, offsetBy: -10)
let mySubstring = str[index...]//游乐场
或后缀
:
let index = str.index(str.endIndex, offsetBy: -10)
let mySubstring = str.suffix(from: index)//操场
甚至更简单:
let mySubstring = str.suffix(10)//操场
请注意,在使用 suffix(from: index)
时,我必须使用 -10
从末尾开始倒数.仅使用 suffix(x)
时不需要这样做,它只需要字符串的最后一个 x
字符.
字符串中的范围
我们再次在这里简单地使用下标.
let start = str.index(str.startIndex, offsetBy: 7)
让 end = str.index(str.endIndex, offsetBy: -6)
让范围=开始..<结束let mySubstring = str[range]//播放
将Substring
转换为String
不要忘记,当您准备保存子字符串时,您应该将其转换为String
,以便可以清理旧字符串的内存.
让 myString = String(mySubstring)