ios - 检查 URL 在 Swift 4 中是否有效

标签 ios swift sfsafariviewcontroller

如何检查 URL 在 Swift 4 中是否有效?我正在构建一个供个人使用的简单 Web 浏览器,尽管我知道每次都要输入完整的 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")
    }
}

例如,如果我要输入一个没有 http://或 https://的网址,应用程序将崩溃并显示错误 'NSInvalidArgumentException',原因:'指定的 URL 具有不受支持的方案。仅支持 HTTP 和 HTTPS URL。'

最佳答案

阅读对已接受答案的评论,我可以看出您实际上想要验证 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)
    }
}

关于ios - 检查 URL 在 Swift 4 中是否有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47464810/

相关文章:

iPhone 模拟器在应用程序启动时崩溃

ios - imagePickerController 委托(delegate)未调用,Swift

iOS 10 Beacon 基于位置的通知不提供主要和次要值

ios - SFSafariViewController 显示任何 URL 的空白屏幕

ios - Safari View Controller URL/导航框(文本字段)颜色

ios - 如何将当前日期转换为特定的 24 小时格式?

javascript - 这段查找 heightInInches 的代码有什么问题?

ios - 从另一个类添加 View 作为 presentViewController 导致 UIEvents 不工作

ios - 显示键盘时Swift ios移动文本字段

ios - 带有主页按钮的 sfsafariviewcontroller 覆盖不起作用