【问题标题】:How to fix deprecated substring(with: )如何修复不推荐使用的子字符串(带有:)
【发布时间】:2026-02-16 17:55:01
【问题描述】:

我正在做一个书本练习,作者有以下代码。

func getMatchingString(str: String) -> String? {
    if let newMatch = str.range(of:regExFindMatchString,                          
                 options:.regularExpression) {
        return str.substring(with: newMatch)
    } else {
        return nil
    }
}

str.substring(with: newMatch) 行显示 'substring(with:) is deprecated use String slicing subscript.'

我试图弄清楚用什么来解决这个问题,但我尝试过的一切都表明我对这个问题的理解还不够好,无法解决它。我知道 newMatch 是一个范围对象,只是不知道如何有效地使用它。

非常感谢任何帮助..

鲍勃

【问题讨论】:

  • return str.substring(with: newMatch) => return String(str[newMatch])?

标签: swift substring


【解决方案1】:

只需对从if let 获得的范围使用下标

if let newMatchRange = str.range(of:regExFindMatchString,   options:.regularExpression) {
    return String(str[newMatchRange])
} else {
    return nil
}

您需要将其转换为字符串,因为该方法实际上返回的是子字符串类型,而不是字符串。

【讨论】:

  • 谢谢,我用各种语言编写代码已有 40 年了,但 Swift 的力量让我感到困惑。我比这更直观地学会了 Java……但我喜欢这种语言……