检查 URL 在 Swift 中是否有效 4
Check if URL is valid in Swift 4
如何检查 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")
}
}
例如,如果我输入没有 http:// 或 https:// 的网址,应用程序会崩溃并显示错误 'NSInvalidArgumentException', reason: 'The specified URL has an unsupported scheme. Only HTTP and HTTPS URLs are supported.'
您可能正在崩溃,因为您正在使用 !
运算符并且没有检查它是否会工作。而是尝试:
@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 和条带空白。
阅读关于已接受答案的评论,我可以看出您实际上想要验证 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)
}
}
如何检查 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")
}
}
例如,如果我输入没有 http:// 或 https:// 的网址,应用程序会崩溃并显示错误 'NSInvalidArgumentException', reason: 'The specified URL has an unsupported scheme. Only HTTP and HTTPS URLs are supported.'
您可能正在崩溃,因为您正在使用 !
运算符并且没有检查它是否会工作。而是尝试:
@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 和条带空白。
阅读关于已接受答案的评论,我可以看出您实际上想要验证 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)
}
}