Swift 索引(encodedOffset:)做什么?如何替换它?

Swift 索引(encodedOffset:)做什么?如何替换它?,swift,swift5,Swift,Swift5,我使用的代码引发以下错误: initencodedOffset:'已弃用:encodedOffset已弃用,因为最常见的用法不正确。使用String.Indexutf16Offset:in:实现相同的行为 这实际上是做什么的?我如何替换它?有没有更简单的方法来实现这个字符串格式 extension String { func applyPatternOnNumbers(pattern: String, replacmentCharacter: Character) -> Strin

我使用的代码引发以下错误:

initencodedOffset:'已弃用:encodedOffset已弃用,因为最常见的用法不正确。使用String.Indexutf16Offset:in:实现相同的行为

这实际上是做什么的?我如何替换它?有没有更简单的方法来实现这个字符串格式

extension String {
    func applyPatternOnNumbers(pattern: String, replacmentCharacter: Character) -> String {
        var pureNumber = self.replacingOccurrences( of: "[^0-9]", with: "", options: .regularExpression)
        for index in 0 ..< pattern.count {
            guard index < pureNumber.count else { return pureNumber }
            let stringIndex = String.Index(encodedOffset: index)
            let patternCharacter = pattern[stringIndex]
            guard patternCharacter != replacmentCharacter else { continue }
            pureNumber.insert(patternCharacter, at: stringIndex)
        }
        return pureNumber
    }
}
String.IndexEncodeOffset:将整型索引转换为String.index索引

建议的替代方案很简单

let stringIndex = String.Index(utf16Offset: index, in: pattern)
但将Int转换为String.Index前后转换是相当麻烦的

这只使用String.Index


非常感谢。是否真的没有更简单的方法来正则化字符串,例如电话号码?如果您详细描述代码应该做什么,这将很有帮助。要将电话号码的字符串正则化,请查看NSDataDetector
extension String {
    func applyPatternOnNumbers(pattern: String, replacmentCharacter: Character) -> String {
        var pureNumber = self.replacingOccurrences( of: "[^0-9]", with: "", options: .regularExpression)
        for index in pattern.indices {
            guard index < pureNumber.endIndex else { return pureNumber }
            let patternCharacter = pattern[index]
            guard patternCharacter != replacmentCharacter else { continue }
            pureNumber.insert(patternCharacter, at: index)
        }
        return pureNumber
    }
}