检查 Swift 4 中的 URL 是否有效

gzi*_*ric 1 ios swift sfsafariviewcontroller

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

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")
    }
}
Run Code Online (Sandbox Code Playgroud)

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

小智 5

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

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

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)
    }
}
Run Code Online (Sandbox Code Playgroud)