【问题标题】:How to get SubString From Range in iOS Swift 4.2 [duplicate]如何在 iOS Swift 4.2 中从 Range 中获取 SubString [重复]
【发布时间】:2019-07-19 18:17:58
【问题描述】:

我是 swift 新手,我想从指定范围内获取子字符串。但我遇到了一些错误。

我发现了关于从范围获取子字符串的类似问题,但这些对我不起作用。我正在使用 XCode 10.1 和 swift 4.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

二元运算符 '..


我只是从前两天开始在这里构建的。

但在 Objective-C 中只需要一行代码,例如 SubStringFromRange(range).

【问题讨论】:

  • 你需要解开你的索引。顺便说一句,使用可选链接和强制解包结果是没有意义的
  • 请发布您的实际代码textStr 这不是可选的
  • 您能否发送任何示例代码以从指定范围获取子字符串?这对我会有更多帮助
  • let substring = textStr.prefix(4+9).suffix(9)
  • 非常感谢 Leo... 它正在工作

标签: swift string swift4.2


【解决方案1】:

你得到一个错误,因为 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]
}

但是,Range 可以从可靠且内置的 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]
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-27
    • 1970-01-01
    • 2019-05-22
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 2020-04-05
    • 2018-01-03
    相关资源
    最近更新 更多