Я пытаюсь преобразовать этот рабочий объектный код C для Swift (which is based on this Apple Documentation)NSDataDetector не найти номер телефона тип результата
-(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;
}
Вот мой Swift преобразования:
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
массив правильно соответствует введенному номеру телефона и правильно отображает тип, как показано здесь:
Но мое if
заявление при проверке тип результата всегда возвращает ложь
if match.resultType == NSTextCheckingType.PhoneNumber
Входные испытания в 555-555-5555 или 5558881234
Итак, как я должен правильно проверить на NSTextCheckingType ?
Благодарим за включение нескольких типов, так как это мне также понадобится позже. Ваш код помог мне найти проблему. Все, что мне нужно было сделать, это удалить [] из совпадений, и это сработало. Но мне также нравится, как вы разделили типы, чтобы сделать их более читаемыми. –