被忽视了的NSDataDetector

作者 : 开心源码 本文共1702个字,预计阅读时间需要5分钟 发布时间: 2022-05-13 共212人阅读

keywords

NSDataDetector NSRegularExpression NSTextCheckingResult

在日常开发场景中经常会遇到,在一段文本中检测少量半结构化的信息,比方:日期、地址段、链接、电话号码、交通信息、航班号、奇怪的格式化了的数字、甚至是相对的指示语等等

假如这些需求在一个项目中出现,在不知道NSDataDetector这个类之前,可能要头皮发麻,之后开始自己编制少量正则,再加上国际化的需求,可能对编制好的正则需要大量的单元测试用例的介入。(预计好多小盆友要被这些东西整自闭了…)

幸运的是,对于 Cocoa 开发者来说,有一个简单的处理方案:NSDataDetector

关于NSDataDetector

NSDataDetector 是 NSRegularExpression 的子类,而不只是一个 ICU 的模式匹配,它可以检测半结构化的信息:日期,地址,链接,电话号码和交通信息

它以惊人的精确度完成这一切。NSDataDetector 可以匹配航班号,地址段,奇怪的格式化了的数字,甚至是相对的指示语,如 “下周六五点”

你可以把它看成是一个有着复杂的令人难以置信的正则表达式匹配,可以从自然语言提取信息(虽然实际的实现细节可能比这个复杂得多)。

NSDataDetector 对象用一个需要检查的信息的位掩码类型来初始化,而后传入一个需要匹配的字符串。像 NSRegularExpression 一样,在一个字符串中找到的每个匹配是用 NSTextCheckingResult 来表示的,它有诸如字符范围和匹配类型的详细信息。然而,NSDataDetector 的特定类型也可以包含元数据,如地址或者日期组件。

NSDataDetector1.jpg
NSDataDetector_print.jpg

当然你也可以结合 YYKit 中的YYLabel进行文本的高亮展现,并且增加点击事件(以下是我项目中需要匹配文本中的手机号码):

NSDataDetector2.jpg

当初始化 NSDataDetector 的时候,确保只指定你感兴趣的类型。每当添加一个需要检查的类型,随着而来的是不小的性能损失为代价。

数据检测器匹配类型

NSDataDetector 的各种 NSTextCheckingTypes 匹配,及其相关属性表:

类型属性
NSTextCheckingTypeDate1. date
2. duration
3. timeZon
NSTextCheckingTypeAddress1.NSTextCheckingNameKey
2. NSTextCheckingJobTitleKey
3.NSTextCheckingOrganizationKey
4.NSTextCheckingStreetKey
5.NSTextCheckingCityKey
6.NSTextCheckingStateKey
7.NSTextCheckingZIPKey
8.NSTextCheckingCountryKey
9.NSTextCheckingPhoneKey
NSTextCheckingTypeLinkurl
NSTextCheckingTypePhoneNumberphoneNumber
NSTextCheckingTypeTransitInformation1.NSTextCheckingAirlineKey
2.NSTextCheckingFlightKey

其余的少量注意事项可以自行参考 Mattt 的文章NSDataDetector自行进行查阅。

好了,大家可以进行尝试一下,在你的应用程序里充分利用 NSDataDetector 解锁那些已经隐藏在众目睽睽下的结构化信息吧。

参考自: https://developer.apple.com/documentation/foundation/nsregularexpression

https://developer.apple.com/documentation/foundation/nstextcheckingresult

https://nshipster.com/nsdatadetector

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 被忽视了的NSDataDetector

发表回复