如何检查UISearchBar.text是否包含URL?我想做这样的事情:
if (searchBar.text == NSTextCheckingType.Link) {
}
但是我收到了错误:
String is not convertible to NSObject
答案 0 :(得分:3)
使用Swift 3,您可以使用NSDataDetector
。 NSDataDetector
有一个名为init(types:)
的初始化程序。 init(types:)
有以下声明:
init(types checkingTypes: NSTextCheckingTypes) throws
初始化并返回数据检测器实例。
要创建查找网址的数据检测器,您必须将NSTextCheckingResult.CheckingType.link作为init(types:)
的参数传递。
NSDataDetector
和NSRegularExpression
的{{1}}方法作为enumerateMatches(in:options:range:using:)
的子类,NSRegularExpression
有一个名为enumerateMatches(in:options:range:using:)
的方法。 NSDataDetector
有以下声明:
enumerateMatches(in:options:range:using:)
枚举字符串,允许Block处理每个正则表达式匹配。
下面的Playground代码显示了如何使用func enumerateMatches(in string: String, options: NSRegularExpression.MatchingOptions = [], range: NSRange, using block: (NSTextCheckingResult?, NSRegularExpression.MatchingFlags, UnsafeMutablePointer<ObjCBool>) -> Void)
和NSDataDetector
方法来检测enumerateMatches(in:options:range:using:)
是否包含String
s:
URL
import Foundation
let testString = " lorem http://www.yahoo.com ipsum google.fr"
do {
let detector = try NSDataDetector(types: NSTextCheckingResult.CheckingType.link.rawValue)
let range = NSRange(location: 0, length: testString.characters.count)
let block = { (result: NSTextCheckingResult?, flags: NSRegularExpression.MatchingFlags, stop: UnsafeMutablePointer<ObjCBool>) -> Void in
if let result = result, result.resultType == NSTextCheckingResult.CheckingType.link {
print(result.url)
}
}
detector.enumerateMatches(in: testString, options: [], range: range, using: block)
} catch {
print(error)
}
/*
prints:
Optional(http://www.yahoo.com)
Optional(http://google.fr)
*/
和NSDataDetector
的{{1}}方法作为NSRegularExpression
的子类,matches(in:options:range:)
有一个名为matches(in:options:range:)
的方法。 NSRegularExpression
有以下声明:
NSDataDetector
返回一个数组,其中包含字符串中正则表达式的所有匹配项。
这是一种方便的方法,可以调用
matches(in:options:range:)
传递适当的字符串,选项和范围。
下面的Playground代码显示了如何使用func matches(in string: String, options: NSRegularExpression.MatchingOptions = [], range: NSRange) -> [NSTextCheckingResult]
和enumerateMatches(in:options:range:using:)
方法来检测NSDataDetector
是否包含matches(in:options:range:)
s:
String