Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: Works for a LivingОтветов: 2

У меня есть последняя бета-версия 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.

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

swiftswift3nsurl

Ответы

Ответ 1 · рейтинг 22 · Nirav D

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

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

Ответ 2 · рейтинг 4 · Andres

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

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы