美文网首页
NSDataDetector

NSDataDetector

作者: FengxinLi | 来源:发表于2016-12-06 17:03 被阅读59次

    在Cocoa开发中,有一个简单的对于寻找数据的解决方案:NSDataDetector。NSDataDetector是继承于NSRegularExpression(Cocoa中的正则表达式)的一个子类,你可以把它看作一个正则表达式匹配器和令人难以置信的复杂的表达式,可以从自然语言(虽然可能更复杂)中提取你想要的信息。看看下面一段例子:

    NSError *error = nil;

    NSDataDetector  *detector = [NSDataDetector  dataDetectorWithTypes:NSTextCheckingTypeLink|NSTextCheckingTypePhoneNumber error:&error];

    NSString *string = @"123 Main www.baidu.com St. / (023) 52261439 测试15102814633";

    [detector enumerateMatchesInString:string

    options:kNilOptions

    range:NSMakeRange(0, [string length])

    usingBlock:^(NSTextCheckingResult * _Nullable result, NSMatchingFlags flags, BOOL * _Nonnull stop) {

    NSLog(@"Match: %@", result);

    }];

    输出结果为:NSDataDetectorStudy[17819:208191] Match:{9, 13}{http://www.baidu.com}2016-12-06 14:00:23.780 NSDataDetectorStudy[17819:208191] Match:{29, 14}{(023) 52261439}2016-12-06 14:00:23.780 NSDataDetectorStudy[17819:208191] Match:{46, 11}{15102814633}

    可以看到在Block中的NSTextCheckingResult作为结果输出,

    注意:当初始化NSDataDetector的时候,只指定自己需要的类型(Type)就可以了,因为多增加一项就会多一些内存的开销。

    看了下 NSTextCheckingResult.h 文件,里面可以找到一些系统为你设定好的匹配类型:

    typedef NS_OPTIONS(uint64_t, NSTextCheckingType) {    // a single type

    NSTextCheckingTypeOrthography          = 1ULL << 0,            // language identification

    NSTextCheckingTypeSpelling              = 1ULL << 1,            // spell checking

    NSTextCheckingTypeGrammar              = 1ULL << 2,            // grammar checking

    NSTextCheckingTypeDate                  = 1ULL << 3,            // date/time detection

    NSTextCheckingTypeAddress              = 1ULL << 4,            // address detection

    NSTextCheckingTypeLink                  = 1ULL << 5,            // link detection

    NSTextCheckingTypeQuote                = 1ULL << 6,            // smart quotes

    NSTextCheckingTypeDash                  = 1ULL << 7,            // smart dashes

    NSTextCheckingTypeReplacement          = 1ULL << 8,            // fixed replacements, such as copyright symbol for (c)

    NSTextCheckingTypeCorrection            = 1ULL << 9,            // autocorrection

    NSTextCheckingTypeRegularExpression NS_ENUM_AVAILABLE(10_7, 4_0)  = 1ULL << 10,          // regular expression matches

    NSTextCheckingTypePhoneNumber NS_ENUM_AVAILABLE(10_7, 4_0)        = 1ULL << 11,          // phone number detection

    NSTextCheckingTypeTransitInformation NS_ENUM_AVAILABLE(10_7, 4_0) = 1ULL << 12            // transit (e.g. flight) info detection

    };

    如果你想在UILabel中简单地使用NSDataDetector,可以看看这个:TTTAttributedLabel 。

    原文 :http://nshipster.com/nsdatadetector/

    相关文章

      网友评论

          本文标题:NSDataDetector

          本文链接:https://www.haomeiwen.com/subject/bjurmttx.html