尝试让一个应用程序启动默认浏览器到一个URL,但只有当输入的URL是有效的,否则它会显示一条消息,说URL是无效的。
如何使用Swift检查有效性?
发布于 2015-05-08 18:27:59
如果您的目标是验证您的应用程序是否可以打开URL,下面是您可以做的事情。虽然safari可以打开URL,但该网站可能不存在或可能被关闭。
// Swift 5
func verifyUrl (urlString: String?) -> Bool {
if let urlString = urlString {
if let url = NSURL(string: urlString) {
return UIApplication.shared.canOpenURL(url as URL)
}
}
return false
}
附带说明,这会使而不是检查一个URL是否有效或是否完整。例如,传递"https://“”的调用返回true。
发布于 2018-03-02 15:54:45
使用Swift 4优雅解决方案
extension String {
var isValidURL: Bool {
let detector = try! NSDataDetector(types: NSTextCheckingResult.CheckingType.link.rawValue)
if let match = detector.firstMatch(in: self, options: [], range: NSRange(location: 0, length: self.utf16.count)) {
// it is a link, if the match covers the whole string
return match.range.length == self.utf16.count
} else {
return false
}
}
}
用法:
let string = "https://www.fs.blog/2017/02/naval-ravikant-reading-decision-making/"
if string.isValidURL {
// TODO
}
使用NSDataDetector
而不是UIApplication.shared.canOpenURL
进行推理
我需要一个方法来检测用户是否提供了一个输入,这个输入是某个东西的URL。在许多情况下,用户在输入的URL中不包括http://
或https://
URL方案--例如,他们将输入"www.google.com"
代替"http://www.google.com"
。如果没有URL方案,UIApplication.shared.canOpenURL
将无法识别该URL并返回false
。与UIApplication.shared.canOpenURL
相比,UIApplication.shared.canOpenURL
是一个相当宽容的工具(如评论中提到的@AmitaiB ),它甚至可以检测出没有http://
方案的URL。这样,在每次测试字符串时,我都可以检测到URL,而不必尝试添加方案。
SFSafariViewController
只能使用http://
/https://
打开URL。因此,如果检测到的URL没有指定URL方案,并且希望打开链接,则必须手动添加该方案。
发布于 2017-01-13 11:06:18
对于被接受的答案的3种快速版本:
func verifyUrl(urlString: String?) -> Bool {
if let urlString = urlString {
if let url = URL(string: urlString) {
return UIApplication.shared.canOpenURL(url)
}
}
return false
}
或者一个更快捷的解决方案:
func verifyUrl(urlString: String?) -> Bool {
guard let urlString = urlString,
let url = URL(string: urlString) else {
return false
}
return UIApplication.shared.canOpenURL(url)
}
https://stackoverflow.com/questions/28079123
复制相似问题