2015-07-18 2 views
-2
import UIKit 

class DetailViewController: UIViewController, UIWebViewDelegate { 

var myWebView: UIWebView = UIWebView() 
var url: String? 

func configureView() { 
    // Update the user interface for the detail item. 
    if let url = self.url { 
     var url: NSURL = NSURL.URLWithString(url) 
     var urlRequest: NSURLRequest = NSURLRequest(URL: url) 
     self.myWebView.loadRequest(urlRequest) 
    } 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    self.myWebView.frame = self.view.bounds 
    self.myWebView.delegate = self 
    self.view.addSubview(self.myWebView) 

    self.configureView() 
} 

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

func setDetailItem(url: String?) { 
    self.url = url 
    self.configureView() 
} 

func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool { 
    return true 
} 
} 

Значение дополнительного типа 'NSURL?' не разворачивается; вы хотели использовать '!' или '?'? 'Ошибка: значение необязательного типа «NSURL?» не разворачивается в ios (быстро)

это сообщение в строке: var url: NSURL = NSURL.URLWithString(url)

Что случилось с моим кодом? Я попытался ввести !, даже ?, но эти методы не помогли.

+0

Нет, это не путь, я уже пробовал. –

ответ

0

Используйте конструктор NSURL вместо NSURL.URLWithString:

var url: NSURL = NSURL(string: self.url)! 

И don't определить URL-адреса двух раз в другую String s и один раз как NSURL:

func configureView() { 
    if let urlStr = self.url { 
     let myURL: NSURL = NSURL(string: urlStr)! 
     let urlRequest: NSURLRequest = NSURLRequest(URL: myURL) 
     self.myWebView.loadRequest(urlRequest) 
    } 
} 

enter image description here

+0

Действительно благодарю вас! Я пробовал этот путь, но когда я запускаю приложение и нажимаю на любую ячейку, консоль говорит (lldb) и строка «var urlRequest: NSURLRequest = NSURLRequest (URL: url)» дает Thread 1: breakpoint 1.1 –

+0

@ КириллКрайнов Затем вы делают что-то еще неправильно - см. изображение, которое я добавил к вопросу. – luk2302

1

Это путь, но вам нужно немного исправить свой код: не используйте одно и то же имя переменной для разных целей, разверните то, что вам нужно, и используйте правый init для NSURL.

func configureView() { 
    if let url = self.url { 
     var newUrl = NSURL(string: url) 
     var urlRequest = NSURLRequest(URL: newUrl!) 
     self.myWebView.loadRequest(urlRequest) 
    } 
} 
0

Прежде всего: Свифт эквивалент [NSURL URLWithString: …] является NSURL(string: …)

быть осторожным с потенциальной неоднозначности имен переменных (URL). if линия разворачивает как

УСТРОЙСТВА
var urlString : String? 

func configureView() { 
    // Update the user interface for the detail item. 
    if let urlValue = self.urlString, url = NSURL(string: urlValue) { 
    let urlRequest = NSURLRequest(URL: url) 
    self.myWebView.loadRequest(urlRequest) 
    } 
} 
+0

Большое спасибо !!! –

Смежные вопросы