首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查URL在Swift 4中是否有效

检查URL在Swift 4中是否有效
EN

Stack Overflow用户
提问于 2017-11-24 08:19:09
回答 2查看 9.9K关注 0票数 1

如何检查URL在Swift 4中是否有效?我正在构建一个简单的web浏览器供个人使用,尽管我知道每次都要输入完整的URL,但我宁愿得到一个警报,而不是如果我忘记了,应用程序就会崩溃。

代码语言:javascript
复制
import UIKit
import SafariServices

class MainViewController: UIViewController {
    @IBOutlet weak var urlTextField: UITextField!

    @IBAction func startBrowser(_ sender: Any) {
        if let url = self.urlTextField.text {
            let sfViewController = SFSafariViewController(url: NSURL(string: url)! as URL)
            self.present(sfViewController, animated: true, completion: nil)
        }
        print ("Now browsing in SFSafariViewController")
    }
}

例如,如果我输入的网址没有http://或https://,应用程序将崩溃并显示错误'NSInvalidArgumentException', reason: 'The specified URL has an unsupported scheme. Only HTTP and HTTPS URLs are supported.'

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-24 08:24:33

您可能会崩溃,因为您正在使用!运算符,而没有检查它是否可以工作。相反,请尝试:

代码语言:javascript
复制
@IBAction func startBrowser(_ sender: Any) {
    if let urlString = self.urlTextField.text {
        let url: URL?
        if urlString.hasPrefix("http://") {
            url = URL(string: urlString)
        } else {
            url = URL(string: "http://" + urlString)
        }
        if let url = url {
            let sfViewController = SFSafariViewController(url: url)
            self.present(sfViewController, animated: true, completion: nil)
            print ("Now browsing in SFSafariViewController")
        }
    }
}

这应该会让你了解如何处理不同的情况,但你可能需要一些更复杂的东西来处理https和strips空白。

票数 2
EN

Stack Overflow用户

发布于 2018-07-10 15:38:12

阅读接受答案的注释,我可以看到您实际上想要验证URL,在尝试使用Safari打开之前检查它是否有效,以防止任何崩溃。

您可以使用正则表达式来验证字符串(我创建了一个扩展,因此对于任何字符串,您都可以检查它是否是有效的URL):

代码语言:javascript
复制
extension String {
func validateUrl () -> Bool {
        let urlRegEx = "((?:http|https)://)?(?:www\\.)?[\\w\\d\\-_]+\\.\\w{2,3}(\\.\\w{2})?(/(?<=/)(?:[\\w\\d\\-./_]+)?)?"
        return NSPredicate(format: "SELF MATCHES %@", urlRegEx).evaluate(with: self)
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47464810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档