"NSURL" is not implicitly convertible to "URL"; did you mean to use "as" to explicitly convert?

Works for a Living picture Works for a Living · Aug 13, 2016 · Viewed 28.3k times · Source

I have latest xcode beta, just trying to load a webpage inside an app.

import UIKit

class ViewController: UIViewController {

    @IBOutlet var webView: UIWebView!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        let url = NSURL (string: "https://www.google.com");
        let requestObj = NSURLRequest(URL: url!);
        webView.loadRequest(requestObj);
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

On this line: let requestObj = NSURLRequest(URL: url!); I get following error:

"NSURL" is not implicitly convertible to "URL"; did you mean to use "as" to explicitly convert?

I removed the exclamation mark and I get this error:

Cannot convert value of type "NSURL?" to expected argument type "URL"

I've been trying variations on this code from all over the internet for the past four hours. I'm thinking latest swift just doesn't allow this anymore or something, because nothing works. I'm set to a 10.0 Deployment Target and a Xcode 8.0 compatible. But I've also tried earlier versions for both of those settings and I get the same error across all versions of both.

Yes, my webView on the storyboard is properly connected to the ViewController.swift.

Answer

Nirav D picture Nirav D · Aug 13, 2016

In swift 3 you need to use URL instead of NSURL, so create url object like this.

if let url = URL(string: "https://www.google.com") {
    webView.load(URLRequest(url: url))
}