【发布时间】:2019-04-23 14:55:06
【问题描述】:
我还是 Swift 的新手,并阅读了 Apple 的语言指南。
当谈到关于子字符串的字符串章节时,我有一个关于子字符串内容变化的问题。当我更改子字符串而不将其转换为字符串时,原始字符串也应更改,而不是。
正如你从 substring 是如何来的解释中看到的, substring 持有对部分字符串存储的引用。如果子字符串未显式转换为字符串,则对子字符串的操作将对字符串内容生效。
这里是描述问题的代码
var originalString = "hello, world!"
var varSubString = originalString[..<originalString.index(originalString.startIndex, offsetBy: 4)]
print(varSubString)
//print "hell"
varSubString.insert("a", at: varSubString.endIndex)
print(varSubString)
//print "hella"
print(originalString)
//print "hello, world!", but expected to print "hella, world"
【问题讨论】:
-
因为 substring 毕竟是一个新对象。
-
谷歌“写时复制”。