UISearchBar.text に URL が含まれているかどうかを確認するにはどうすればよいですか? 私はこのようなことを考えました:
if (searchBar.text == NSTextCheckingType.Link) {
}
しかし、私はエラーが発生します:
String is not convertible to NSObject
UISearchBar.text に URL が含まれているかどうかを確認するにはどうすればよいですか? 私はこのようなことを考えました:
if (searchBar.text == NSTextCheckingType.Link) {
}
しかし、私はエラーが発生します:
String is not convertible to NSObject
Swift 3 では、 を使用できますNSDataDetector
。NSDataDetector
と呼ばれるイニシャライザがありますinit(types:)
。init(types:)
次の宣言があります。
init(types checkingTypes: NSTextCheckingTypes) throws
データ検出インスタンスを初期化して返します。
URL を検出するデータ検出器を作成するには、NSTextCheckingResult.CheckingType.linkを のパラメーターとして渡す必要がありますinit(types:)
。
NSDataDetector
とNSRegularExpression
のenumerateMatches(in:options:range:using:)
メソッドの使用のサブクラスとしてNSRegularExpression
、 にNSDataDetector
は というメソッドがありenumerateMatches(in:options:range:using:)
ます。enumerateMatches(in:options:range:using:)
次の宣言があります。
func enumerateMatches(in string: String, options: NSRegularExpression.MatchingOptions = [], range: NSRange, using block: (NSTextCheckingResult?, NSRegularExpression.MatchingFlags, UnsafeMutablePointer<ObjCBool>) -> Void)
ブロックが各正規表現の一致を処理できるようにする文字列を列挙します。
以下の Playground コードは、 a にsが含まれているかどうかを検出するためにNSDataDetector
andenumerateMatches(in:options:range:using:)
メソッドを使用する方法を示しています。String
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
とNSRegularExpression
のmatches(in:options:range:)
メソッドの使用のサブクラスとしてNSRegularExpression
、 にNSDataDetector
は というメソッドがありmatches(in:options:range:)
ます。matches(in:options:range:)
次の宣言があります。
func matches(in string: String, options: NSRegularExpression.MatchingOptions = [], range: NSRange) -> [NSTextCheckingResult]
文字列内の正規表現のすべての一致を含む配列を返します。
enumerateMatches(in:options:range:using:)
これは、適切な文字列、オプション、および範囲を渡すことを呼び出す便利なメソッドです。
以下の Playground コードは、 a にsが含まれているかどうかを検出するためにNSDataDetector
andmatches(in:options:range:)
メソッドを使用する方法を示しています。String
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 resultArray = detector.matches(in: testString, options: [], range: range)
for result in resultArray {
if result.resultType == NSTextCheckingResult.CheckingType.link {
print(result.url)
}
}
} catch {
print(error)
}
/*
prints:
Optional(http://www.yahoo.com)
Optional(http://google.fr)
*/