我无法理解Xcode在此行面临的问题:
iteration.template = template[iterationSubstring.endIndex...substring.startIndex]
template是一个String和iterationSubstring和substring是Substring第template。Xcode用以下消息突出显示方括号:
template
String
iterationSubstring
substring
Substring
下标’subscript(_ :)’要求类型’Substring.Index’和’Int’是等效的
错误消息对我来说没有任何意义。我尝试Substring通过创建Range<String.Index>带有[template.startIndex...template.endIndex]下标的来获得。这有Int什么关系?为什么相同的模式在其他地方也起作用?
Range<String.Index>
[template.startIndex...template.endIndex]
Int
Xcode操场代码重现该问题:
import Foundation let template = "This is an ordinary string literal." let firstSubstringStart = template.index(template.startIndex, offsetBy: 5) let firstSubstringEnd = template.index(template.startIndex, offsetBy: 7) let firstSubstring = template[firstSubstringStart...firstSubstringEnd] let secondSubstringStart = template.index(template.startIndex, offsetBy: 10) let secondSubstringEnd = template.index(template.startIndex, offsetBy: 12) let secondSubstring = template[secondSubstringStart...secondSubstringEnd] let part: String = template[firstSubstring.endIndex...secondSubstring.startIndex]
毕竟,我有一个模板字符串和它的两个子字符串。我想要一个String从第一个结尾Substring到第二个开始的范围Substring。
当前版本的Swift使用Substring切片的结构String。
错误似乎是误导性的,如果你要一个(范围下标)分配发生Substring的String变化。
要解决该错误,请String从Substring
iteration.template = String(template[iterationSubstring.endIndex...substring.startIndex])
但是,强烈建议您不要使用具有不同字符串(iterationSubstring和substring)的索引来创建范围。切片主字符串,保留索引。
第二个(同时删除)示例中的崩溃是因为字符串的最后一个字符 位于索引beforeendIndex,它是
endIndex
template[template.startIndex..<template.endIndex]
或更短
template[template.startIndex...]