为什么我可以打印字符串,但在尝试将其存储到Swift 5时抛出错误?

为什么我可以打印字符串,但在尝试将其存储到Swift 5时抛出错误?,swift,string,swift5,Swift,String,Swift5,我有一个非常基本的代码,可以生成2个字符串。索引范围从现有的websiteContent字符串开始,如下所示: let test1 = websiteContent.range(of: startString, options: NSString.CompareOptions.literal, range: websiteContent.startIndex..<websiteContent.endIndex) let test2 = websiteContent.range(of: e

我有一个非常基本的代码,可以生成2个字符串。索引范围从现有的websiteContent字符串开始,如下所示:

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)
然后打印两个范围之间的文本:

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'Subscript_:'要求类型'String.Index'和'Int'等效


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

这实际上是一个错误,错误是误导性的

必须从子字符串创建字符串,仅对类型进行注释是不够的

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


你可以省略,range:websiteContent.startIndex..StringwebsiteContent[开始.lowerBound..我想你之前回答了一个相同的问题…@MartinR我很钦佩你记住了所有这些东西。哇,谢谢你的帮助!想想不定义变量类型我能节省多少时间…哦,伙计