gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 19:35:10 26 4
gpt4 key购买 nike

我正在尝试将这个有效的 Objective C 代码转换为 Swift (which is based on this Apple Documentation)

-(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 数组正确匹配输入的电话号码并正确显示类型,如下所示:

enter image description here

但是我的if语句在检查结果类型时总是返回false

if match.resultType == NSTextCheckingType.PhoneNumber

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

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

最佳答案

试试这个:

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)
}
}

希望对你有帮助

关于ios - NSDataDetector 找不到电话号码结果类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29921517/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com