你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> 初識 NSDataDetector

初識 NSDataDetector

編輯:IOS開發基礎

機器說二進制語言,而人類說謎語,半真半假,和疏忽。

在Cocoa開發中,有一個簡單的對於尋找數據的解決方案:NSDataDetector。

NSDataDetector是繼承於NSRegularExpression(Cocoa中的正則表達式)的一個子類,你可以把它看作一個正則表達式匹配器和令人難以置信的復雜的表達式,可以從自然語言(雖然可能更復雜)中提取你想要的信息。

看看下面一段例子:

NSError *error = nil;
NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink | NSTextCheckingTypePhoneNumber error:&error];
    
NSString *string = @"123 Main www.isaced.com St. / (023) 52261439";
[detector enumerateMatchesInString:string
                           options:kNilOptions
                             range:NSMakeRange(0, [string length])
                        usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
                                NSLog(@"Match: %@", result);
        }];

輸出結果為:

Match: {9, 14}{http://www.isaced.com}
Match: {30, 14}{(023) 52261439}

可以看到在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
};

當然這裡只是截取了一部分,具體可以點dataDetectorWithTypes方法進入到NSTextCheckingResult.h文件中查看。

  • NSTextCheckingTypeDate

    • date

    • duration

    • timeZone

  • NSTextCheckingTypeAddress

    •         addressComponents

    •         NSTextCheckingNameKey

    •         NSTextCheckingJobTitleKey

    •         NSTextCheckingOrganizationKey

    •         NSTextCheckingStreetKey

    •         NSTextCheckingCityKey

    •         NSTextCheckingStateKey

    •         NSTextCheckingZIPKey

    •         NSTextCheckingCountryKey

    •         NSTextCheckingPhoneKey

  • NSTextCheckingTypeLink

    •   url

  • NSTextCheckingTypePhoneNumber

    • phoneNumber

    • components*

  • NSTextCheckingTypeTransitInformation

    • NSTextCheckingAirlineKey

    • NSTextCheckingFlightKey

如果你想在UILabel中簡單地使用NSDataDetector,可以看看這個:TTTAttributedLabel 。

參考自:http://nshipster.com/nsdatadetector/


  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved