ios - 如何知道 enumerateTags 函数何时完成?

标签 ios swift

我正在使用 NSLinguisticTagger 类的 enumerateTags 函数进行一些字符串分析。一切正常,除了一个:我永远无法确定枚举何时结束。

let originalText = "Some text."
let options: NSLinguisticTagger.Options = [.omitWhitespace, .omitPunctuation]
let schemes = NSLinguisticTagger.availableTagSchemes(forLanguage:"en")
let tagger = NSLinguisticTagger(tagSchemes: schemes, options:Int(options.rawValue))
tagger.string = originalText
tagger.enumerateTags(in: NSMakeRange(0, (originalText as NSString).length), 
scheme: NSLinguisticTagScheme.tokenType, options: options) { (tag, tokenRange, _, stop) in
    // I do my job here
    // I need to callback when the enumeration is over
    if tokenRange.upperBound == originalText.count {
        // Callback
    }
})

当原始字符串以字母结尾时,此结束检查工作正常,但如果它以标点符号或空格结尾,如上例所示,则永远不会调用回调。

我在 google 上搜索了很多,但我认为找不到这个广泛传播的任务的任何解决方案:如何确定枚举何时结束?

最佳答案

您要删除标点符号和空格,因此如果文本确实以空格或标点符号结尾,则条件 if tokenRange.upperBound == originalText.count 永远不会为真。

您可以在语言标注器中使用此字符串而不是 originalText:

let newText = originalText
    .trimmingCharacters(in: .whitespacesAndNewlines)
    .trimmingCharacters(in: .punctuationCharacters)

您的代码如下所示:

let originalText = "Some text  "

let newText = originalText
    .trimmingCharacters(in: .whitespacesAndNewlines)
    .trimmingCharacters(in: .punctuationCharacters)

let options: NSLinguisticTagger.Options = [.omitWhitespace, .omitPunctuation]
let schemes = NSLinguisticTagger.availableTagSchemes(forLanguage:"en")
let tagger = NSLinguisticTagger(tagSchemes: schemes, options:Int(options.rawValue))
tagger.string = originalText
tagger.enumerateTags(in: NSMakeRange(0, (newText as NSString).length), scheme: .tokenType, options: options, using: {(tag, tokenRange, _, stop) in
    if tokenRange.upperBound == newText.count {
        print("reached the end")
    }
}) 

回调以代码中的 in 开始,而不是在 if 条件中。

关于ios - 如何知道 enumerateTags 函数何时完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52598209/

相关文章:

iphone - 关于数据模型的思考

ios - iOS7 上的自定义 UITextView 占位符对齐

swift - 如何在swift4中将字符转换为字符串?

ios - swift 3 : Array Value for key

ios - 在 Swift 中从缓冲区获取 NSData

ios - 带有标题和自定义指示器的 UIPageViewController

iphone - UIToolBar 选中按钮状态

ios - 将数组字段传递给 Swift 中的变量的此 JSON 语句的正确语法?

ios - 使用 'containing' 而不是 'equal to' 搜索数组

ios - 在 UITableview 重叠单元格中制作节标题