如何修复不推荐使用的子字符串(带有:)

Posted

技术标签:

【中文标题】如何修复不推荐使用的子字符串(带有:)【英文标题】:How to fix deprecated substring(with: ) 【发布时间】:2021-01-25 16:13:40 【问题描述】:

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

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])? 【参考方案1】:

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

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

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

【讨论】:

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

以上是关于如何修复不推荐使用的子字符串(带有:)的主要内容,如果未能解决你的问题,请参考以下文章

带有数组字符串的子字符串 - Swift

如何在批处理文件中获取带有特殊字符的子字符串?

如何修复不显示的子菜单?

String的replace方法怎么转换带有特殊字符的子字符串?

如何在 C++ 中搜索 std::string 中的子字符串?

如何搜索 LPWSTR 的子字符串?