我是新来的斯威夫特,我想从指定的范围获得子字符串。但我有一些错误。
我在从range获得subString的过程中也发现了类似的问题,但这些问题对我来说是行不通的。我使用的是XCode 10.1和Viver4.2。在从指定的范围获取子字符串时,我得到了错误。我试过这样做(示例代码)
let textStr = "Sample text here"
let newRange = NSMakeRange(4,9)
let startIndex = textStr?.index((textStr?.startIndex)!, offsetBy: newRange.location)
let endIndex = textStr?.index((textStr?.startIndex)!, offsetBy: newRange.length)
let newHashtagRange = startIndex..<endIndex
let newHashTagFound = textStr[newHashtagRange]错误:
下面是这行代码的错误
let newHashtagRange = startIndex..<endIndex二进制运算符'..<‘不能应用于两个'String.Index?’操作数
我只是从过去的两天开始在这里工作。
但是在Objective中,只需要一行像SubStringFromRange(range).这样的代码
发布于 2019-07-19 18:34:45
您将得到一个错误,因为startIndex和endIndex都是选项,因为在定义它们时有可选的链。
这很奇怪,因为在示例代码中,textStr实际上不是可选的,可选链甚至不会编译。我猜你是想缩短这个例子。我假设textStr是可选的,并向您展示了如何避免使用强制展开,这几乎总是一个坏主意。此外,您得到的结束索引是错误的。您需要使用长度从计算的开始索引中进行偏移。这就留给你这个:
let textStr: String? = "Sample text here"
if let textStr = textStr {
let newRange = NSMakeRange(4,9)
let startIndex = textStr.index(textStr.startIndex, offsetBy: newRange.location)
let endIndex = textStr.index(startIndex, offsetBy: newRange.length)
let newHashtagRange = startIndex..<endIndex
let newHashTagFound = textStr[newHashtagRange]
}但是,可以从一个可靠的内置的NSRange初始化一个范围(如果范围超出范围,则返回一个可选的):
let textStr: String? = "Sample text here"
let newRange = NSMakeRange(4,9)
if let textStr = textStr
, let newHashtagRange = Range(newRange, in: textStr)
{
let newHashTagFound = textStr[newHashtagRange]
}https://stackoverflow.com/questions/57117781
复制相似问题