为什么我可以打印一个字符串,但是当我尝试将它存储在 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
,默认整个字符串范围
我有一个非常基本的代码,它从现有的 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
,默认整个字符串范围