NSRegularExpressions在UITextView上的性能

时间:2018-03-12 14:26:33

标签: ios swift nsregularexpression uitextviewdelegate

我目前正在使用NSRegularExpressionsregex),我正在构建markdown regex

我认为我改变与regex相匹配的文字的方法并不是最好的,这就是原因。

我创建了以下内容,例如:

UITextViewDelegate

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {

    regularExpression()

    return true
}

func regularExpression() {
    // Some other regular expressions.... 

    let boldPattern = "\\*{2}([\\w\\d ]+)\\*{2}"
    do {
        let regex = try NSRegularExpression(pattern: boldPattern)
        let results = regex.matches(in: str, range: NSRange(str.startIndex..., in: str))

        _ = results.map {
            self.applyAttributes(toRange: $0.range, withType: .bold)
        }
    } catch let err{
        print("error:", err.localizedDescription)
    }
}

如上所述,为了让我在用户输入后立即更新文本,我目前正在浏览每个插入字符的文本,并分析是否存在任何匹配模式(在本例中为粗体)作为**一些文字**);

通过这样做,当我进行输入时,CPU使用率从3%增加到25%,因此我认为这不是最好的方法。

在用户输入时,即时应用NSRegularExpressions的最佳方法是什么? - 我目前正在使用最好的一个吗?

谢谢

1 个答案:

答案 0 :(得分:2)

一个非常简单的解决方案是在调用*方法之前检查插入的文本是否包含regularExpression(星号):

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {

    if text.contains("*"){
        regularExpression()
    }

    return true
}