【问题标题】:"NSURL" is not implicitly convertible to "URL"; did you mean to use "as" to explicitly convert?“NSURL”不能隐式转换为“URL”;您的意思是使用“as”来显式转换吗?
【发布时间】:2016-12-20 06:55:45
【问题描述】:

我有最新的 xcode 测试版,只是想在应用程序中加载网页。

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.
    }
}

在这条线上:let requestObj = NSURLRequest(URL: url!); 我收到以下错误:

“NSURL”不能隐式转换为“URL”;您的意思是使用“as”来显式转换吗?

我删除了感叹号并收到此错误:

无法转换“NSURL”类型的值?到预期的参数类型“URL”

在过去的四个小时里,我一直在尝试从整个 Internet 上更改此代码。我在想最新的 swift 不再允许这样做或其他什么,因为没有任何效果。我设置为 10.0 部署目标和 Xcode 8.0 兼容。但是我也为这两种设置尝试了早期版本,并且在这两种设置的所有版本中都出现了相同的错误。

是的,我在故事板上的 webView 已正确连接到 ViewController.swift。

【问题讨论】:

  • 在 Swift 3 中,使用 URL 和 URLRequest(去掉 NS 前缀)。见stackoverflow.com/a/37812485/2227743
  • NSURL (string:) 返回一个 Optional,你必须打开它。投射为 URL 将起作用。
  • @K.Nimo OP 已经强制解包 - 无论如何,对于 URL 对于 URLRequest,最好使用新的 Swift 3 结构。 :)
  • "Edit > Convert > To Current Swift Syntax ..." 为您自动修复了这个问题(我刚刚验证过)。你至少可以在提问之前尝试一下。
  • 不,它没有。在问这个问题之前我很容易尝试过,但它并没有为我解决这个问题。当我尝试这样做时,它实际上会产生构建错误。另外,你为什么假设每个在这里提问的人(像我一样的菜鸟)甚至都知道这个功能?表现出一些礼仪。我在这里的另一个问题中发现了它,它没有修复我的代码,并且产生了更多的构建错误。然后我放弃了,问了这个问题。

标签: swift nsurl swift3


【解决方案1】:

在swift 3中你需要使用URL而不是NSURL,所以像这样创建url对象。

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

【讨论】:

  • 完全有效。谢谢。让 url = URL(string: "google.com"); 让 requestObj = URLRequest(url: url!);
  • 为什么会这样?为什么不直接转换?
  • 如果我需要与使用 NSURL 的 Objective C 类进行互操作怎么办?
  • @Jules 试试这个NSURL *url = [NSURL URLWithString:@"fhttps://www.google.com"]; [webView loadRequest: [[NSURLRequest alloc] initWithURL:url]]
【解决方案2】:

Swift 3.1 更新:

let url = URL(string: "https://www.google.com")
let request = URLRequest(url: url!)
webView.load(request)

注意使用URL 代替NSURLload 代替loadRequest

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-05
    • 2020-05-30
    相关资源
    最近更新 更多