Swift:检查UISearchBar.text是否包含url

时间:2014-08-29 17:00:35

标签: swift string cocoa-touch nsdatadetector

如何检查UISearchBar.text是否包含URL?我想做这样的事情:

if (searchBar.text == NSTextCheckingType.Link) {

}

但是我收到了错误:

String is not convertible to NSObject

1 个答案:

答案 0 :(得分:3)

使用Swift 3,您可以使用NSDataDetectorNSDataDetector有一个名为init(types:)的初始化程序。 init(types:)有以下声明:

init(types checkingTypes: NSTextCheckingTypes) throws
  

初始化并返回数据检测器实例。

要创建查找网址的数据检测器,您必须将NSTextCheckingResult.CheckingType.link作为init(types:)的参数传递。


#1。使用NSDataDetectorNSRegularExpression的{​​{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

#2。使用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