gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 05:59:29 26 4
gpt4 key购买 nike

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

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

}

但是我得到了错误:

String is not convertible to NSObject

最佳答案

在 Swift 3 中,您可以使用 NSDataDetectorNSDataDetector 有一个名为 init(types:) 的初始化器. init(types:) 具有以下声明:

init(types checkingTypes: NSTextCheckingTypes) throws

Initializes and returns a data detector instance.

为了创建一个查找 url 的数据检测器,您必须传递 NSTextCheckingResult.CheckingType.link作为 init(types:) 的参数。


#1。使用 NSDataDetectorNSRegularExpressionenumerateMatches(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)

Enumerates the string allowing the Block to handle each regular expression match.

下面的 Playground 代码展示了如何使用 NSDataDetectorenumerateMatches(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)
*/

#2。使用 NSDataDetectorNSRegularExpressionmatches(in:options:range:) 方法

作为 NSRegularExpression 的子类,NSDataDetector 有一个名为 matches(in:options:range:) 的方法. matches(in:options:range:) 具有以下声明:

func matches(in string: String, options: NSRegularExpression.MatchingOptions = [], range: NSRange) -> [NSTextCheckingResult]

Returns an array containing all the matches of the regular expression in the string.

This is a convenience method that calls enumerateMatches(in:options:range:using:) passing the appropriate string, options, and range.

下面的 Playground 代码显示了如何使用 NSDataDetectormatches(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)
*/

关于Swift:检查 UISearchBar.text 是否包含 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25572850/

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