首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSDataDetector找不到电话号码结果类型

NSDataDetector找不到电话号码结果类型
EN

Stack Overflow用户
提问于 2015-04-28 13:52:26
回答 1查看 1.5K关注 0票数 4

我试图将这个工作目标C代码转换为Swift (它是基于这个Apple文档)

代码语言:javascript
复制
-(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转换:

代码语言:javascript
复制
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语句总是返回false

代码语言:javascript
复制
if match.resultType == NSTextCheckingType.PhoneNumber

输入测试为555-555-5555或5558881234

那么,我应该如何正确检查NSTextCheckingType呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-28 14:09:29

试试这个:

代码语言:javascript
复制
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,因为它只有在匹配电话号码的情况下才进入循环。

否则,如果您想匹配多个类型,如下面的示例中所示:

代码语言:javascript
复制
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)))

您可以使用以下代码检查是否匹配其中一个或另一个:

代码语言:javascript
复制
for match in matches {
    if let phone = match.phoneNumber! {
        println(phone)
    }

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

希望这能帮到你。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29921517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档