我试图将这个工作目标C代码转换为Swift (它是基于这个Apple文档)
-(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语句总是返回false
if match.resultType == NSTextCheckingType.PhoneNumber输入测试为555-555-5555或5558881234
那么,我应该如何正确检查NSTextCheckingType呢?
发布于 2015-04-28 14:09:29
试试这个:
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)
}
}希望这能帮到你。
https://stackoverflow.com/questions/29921517
复制相似问题