如何在 ViewController.swift 的函数中引用 URL 对象?

How to reference a URL object inside a function from ViewController.swift?

我正在尝试将网页从 ViewController.swift 传递到另一个 WebView。 URL 由另一个 class 发起。

到目前为止,我已经能够创建 webView,创建 segue,并在点击 ViewController.swift 中的按钮时在该控制器中加载一个虚拟网页。当我点击按钮时,正确的网址会通过 print(wikiURL) 调用打印在控制台上。

我试图通过首先在 ViewController 内声明一个全局变量来调用变量,然后在函数内修改它,然后尝试通过设置变量从 webView 控制器到达。

这是我调用 segue 的函数:

func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {

if let vc = storyboard?.instantiateViewController(withIdentifier: "WikiViewController") as? WikiViewController {
        guard let capital = view.annotation as? Capital else { return }
        let wikiURL = capital.url
        print(wikiURL)
        navigationController?.pushViewController(vc, animated: true)
    }

这是我的 webView 控制器:

class WikiViewController: UIViewController, WKNavigationDelegate {

    var webView: WKWebView!

    override func loadView() {
        webView = WKWebView()
        view = webView
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        title = webView.title
        let request = URLRequest(url: URL(string: "")!)
        webView.load(request)
    }

}

我应该可以将 URL(string: "")!) 替换为 wikiURL,然后将其加载到 webView 中。

感谢您的帮助。

WikiViewController 中,不是创建 Capital? 类型的 url,它必须是 URL? 类型,即

var url: URL?

使用此 urlWKWebView 创建 URLRequest

class WikiViewController: UIViewController, WKNavigationDelegate {
    var webView: WKWebView!
    var url: URL?

    override func loadView() {
        webView = WKWebView()
        view = webView
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        title = webView.title
        if let url = self.url {
            let request = URLRequest(url: url)
            webView.load(request)
        }
    }
}

用法:

mapView(_:,annotationView:, calloutAccessoryControlTapped:) 方法中创建 WikiViewControllerinstance 时,将 属性 vc.url 设置为 wikiURL

if let vc = storyboard?.instantiateViewController(withIdentifier: "WikiViewController") as? WikiViewController {
    guard let capital = view.annotation as? Capital else { return }
    let wikiURL = capital.url
    print(wikiURL)
    vc.url = wikiURL //here......
    navigationController?.pushViewController(vc, animated: true)
}

注意: 我假设 wikiURLURL? 类型。如果它是 String,请使用 String 创建一个 URL 实例,然后将其设置为 vc.url.