为什么我可以打印一个字符串,但是当我尝试将它存储在 Swift 5 中时会抛出错误?

Why I can print a String, but throws error when I try to store it in Swift 5?

我有一个非常基本的代码,它从现有的 websiteContent 字符串中生成 2 String.Index 范围,如下所示:

let test1 = websiteContent.range(of: startString, options: NSString.CompareOptions.literal, range: websiteContent.startIndex..<websiteContent.endIndex)

let test2 = websiteContent.range(of: endString, options: NSString.CompareOptions.literal, range: websiteContent.startIndex..<websiteContent.endIndex)

然后打印 2 个范围之间的文本:

if let beginning = test1, let end = test2 {
    print(websiteContent[beginning.lowerBound..<end.upperBound])
}

这很好用,我的问题是,当我尝试存储我刚刚打印的这个字符串值时,它会抛出一条错误消息。我尝试存储它的方式是这样的:

if let beginning = test1, let end = test2 {
    let why : String = websiteContent[beginning.lowerBound..<end.upperBound]
}

错误信息说:下标'subscript(_:)'要求类型'String.Index'和'Int'等价

你能帮我理解我做错了什么吗?

这实际上是一个错误,错误具有误导性。

您必须从 Substring 创建一个 String,注释类型是不够的。

if let beginning = test1, let end = test2 {
    let why = String(websiteContent[beginning.lowerBound..<end.upperBound])
}

旁注:

可以省略, range: websiteContent.startIndex..<websiteContent.endIndex,默认整个字符串范围