NSURL не может быть неявно преобразован в URL; Вы хотели использовать as для явного преобразования?

У меня есть последняя бета-версия 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»; Вы хотели использовать «как» для явного преобразования?

Я убрал восклицательный знак, и я получаю эту ошибку:

Не удается преобразовать значение типа "NSURL?" к ожидаемому типу аргумента "URL"

Я пробовал варианты этого кода со всего Интернета в течение последних четырех часов. Я думаю, что последний Swift просто больше не позволяет этого или что-то в этом роде, потому что ничего не работает. Я настроен на цель развертывания 10.0 и совместим с Xcode 8.0. Но я также пробовал более ранние версии для обеих этих настроек, и я получаю одну и ту же ошибку во всех версиях обоих.

Да, мой webView на раскадровке правильно подключен к ViewController.swift.


person Works for a Living    schedule 13.08.2016    source источник
comment
В Swift 3 используйте URL и URLRequest (отбросьте префикс NS). См. stackoverflow.com/a/37812485/2227743.   -  person Eric Aya    schedule 13.08.2016
comment
NSURL (string:) вернуть необязательный, вы должны развернуть его. Трансляция как URL будет работать.   -  person Khundragpan    schedule 13.08.2016
comment
@K.Nimo OP уже принудительно разворачивает его - и в любом случае лучше использовать новые структуры Swift 3 для URL и для URLRequest. :)   -  person Eric Aya    schedule 13.08.2016
comment
Редактировать › Преобразовать › В текущий синтаксис Swift ... устраняет проблему автоматически для вас (я только что проверил это). Вы могли бы хотя бы попробовать это, прежде чем задавать вопрос.   -  person Martin R    schedule 13.08.2016
comment
Нет, это не так. Я легко попробовал это, прежде чем задавать вопрос, и это НЕ помогло мне. Это фактически создало ошибки сборки, когда я попробовал это. Кроме того, почему вы предполагаете, что все, задающие здесь вопросы (нубы вроде меня), вообще знают об этой функции? Проявите приличия. Я узнал об этом из другого вопроса здесь, и это не исправило мой код и создало больше ошибок сборки. Тогда я сдался и задал вопрос.   -  person Works for a Living    schedule 13.08.2016
comment
@Thom: извините, если я ошибся, но я попробовал это сам, прежде чем публиковать этот комментарий. Я скопировал ваш точный код в проект Xcode 8 beta 5 iOS и выбрал «Правка» > «Преобразовать» > «В текущий синтаксис Swift...». Код был обновлен до let url = URL (string: "https://www.google.com"); let requestObj = URLRequest(url: url!); .   -  person Martin R    schedule 14.08.2016
comment
Прохладно. Когда я это сделал, возникли ошибки сборки. Просто будьте менее резкими по отношению к следующему парню, который, по вашему мнению, заслуживает вашей снисходительности. Это помогает сделать отладку менее напряженной и создает благоприятную среду для переполнения стека. ;) Все остальные комментарии были довольно дружелюбными.   -  person Works for a Living    schedule 14.08.2016


Ответы (2)


В Swift 3 вам нужно использовать URL вместо NSURL, поэтому создайте такой объект URL.

if let url = URL(string: "https://www.google.com") {
    webView.load(URLRequest(url: url))
}
person Nirav D    schedule 13.08.2016
comment
Полностью работает. Спасибо. let url = URL(string: google.com); пусть requestObj = URLRequest (url: url!); - person Works for a Living; 13.08.2016
comment
почему так сделано? Почему просто не конвертирует? - person Honey; 21.10.2016
comment
Что делать, если мне нужно взаимодействовать с классами Objective C, которые используют NSURL? - person Jules; 07.07.2018
comment
@Jules Попробуйте так NSURL *url = [NSURL URLWithString:@"fhttps://www.google.com"]; [webView loadRequest: [[NSURLRequest alloc] initWithURL:url]] - person Nirav D; 09.07.2018

Обновление для Swift 3.1:

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

Обратите внимание на использование URL вместо NSURL и load вместо loadRequest.

person Andres    schedule 17.05.2017