2015-04-28 76 views
4

我試圖轉換這方面的工作目標C代碼斯威夫特(which is based on this Apple DocumentationNSDataDetector沒有找到電話號碼,結果類型

-(BOOL)validatePhone:(NSString*)phone { 
    NSError *error = NULL; 
    NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypePhoneNumber 
                   error:&error]; 

    NSArray *matches = [detector matchesInString:phone 
             options:0 
              range:NSMakeRange(0, [phone length])]; 

    for (NSTextCheckingResult *match in matches) { 
     if ([match resultType] == NSTextCheckingTypePhoneNumber) { 
      NSString *phoneNumber = [match phoneNumber]; 
      self.inputPhoneNumber.text = phoneNumber; 
      return TRUE; 
     } 
    } 
    NSLog(@"Phone Number Not Found"); 
    return FALSE; 
} 

這裏是我的雨燕轉換:

func validatePhone(phone: NSString) -> Bool { 
    var error: NSError? 
    let detector = NSDataDetector(types: NSTextCheckingType.PhoneNumber.rawValue, error: &error) 

    var matches: NSArray = [detector!.matchesInString(phone as String, options: nil, range: NSMakeRange(0, phone.length))] 

    var match:NSTextCheckingResult 

    for match in matches{ 
     if match.resultType == NSTextCheckingType.PhoneNumber{ 
      inputPhoneNumber.text = match.phoneNumber 
      return true 
     } 
    } 

    NSLog("Phone Number Not Found") 

    return false 
} 

matches數組正確匹配輸入的電話號碼並正確顯示類型,如下所示:

enter image description here

但總是檢查結果類型,當我if語句返回false

if match.resultType == NSTextCheckingType.PhoneNumber 

輸入測試爲555-555-5555或5558881234

所以,我應該如何正確檢查的NSTextCheckingType ?

回答

2

試試這個:

var text = "555-555-5555" 

let types: NSTextCheckingType = .PhoneNumber 
var error : NSError? 

let detector = NSDataDetector(types: types.rawValue, error: &error) 
var matches = detector!.matchesInString(text, options: nil, range: NSMakeRange(0, count(text))) 

for match in matches { 
    println(match.phoneNumber!) 
} 

在上面的代碼中你不需要檢查resultType,因爲它只在循環進入,如果匹配的電話號碼。

但除此之外,如果你想匹配多於一個類型的像下面的例子:

var text = "http://www.example.com" 

let types: NSTextCheckingType = .PhoneNumber | .Link 
var error : NSError? 

let detector = NSDataDetector(types: types.rawValue, error: &error) 
var matches = detector!.matchesInString(text, options: nil, range: NSMakeRange(0, count(text))) 

您可以使用下面的代碼來檢查是否匹配一個或另一個:

for match in matches { 
    if let phone = match.phoneNumber! { 
     println(phone) 
    } 

    if let url = match.URL! { 
     println(url) 
    } 
} 

我希望這對你有所幫助。

+0

感謝您也包括多種類型,因爲我以後也會需要它。你的代碼幫助我找到問題。我所需要做的就是從比賽中刪除[],它的工作。但是我也喜歡你如何分離這些類型以使其更具可讀性。 –