2016-11-01 2 views
3

Я пытаюсь открыть веб-сайт в моем приложении, но по какой-то причине одна линии постоянно возвращается ноль, Heres мой код:Swift. URL возвращая ноль

let url = URL(string: "http://en.wikipedia.org/wiki/\(element.Name)")! 
    if #available(iOS 10.0, *) { 
     UIApplication.shared.open(url, options: [:], completionHandler: nil) 
    } else { 
     UIApplication.shared.openURL(url) 
    } 
} 

Это первая линия (let url = URL...), который продолжает возвращать ошибку :

fatal error: unexpectedly found nil while unwrapping an Optional value.

Что мне делать, чтобы исправить это?

+1

Проверить 'element.Name'. Если это необязательная String Interpolation, это может привести к неожиданному поведению. – vadian

ответ

1

Не принудительному разворачивать его (!). Когда вы используете (!), А значение переменной равно nil, ваша программа вылетает, и вы получаете эту ошибку. Вместо этого вы хотите безопасно развернуть опцию с помощью инструкции «guard let» или «if let».

guard let name = element.Name as? String else { 
    print("something went wrong, element.Name can not be cast to String") 
    return 
} 

if let url = URL(string: "http://en.wikipedia.org/wiki/\(name)") { 
    UIApplication.shared.openURL(url) 
} else { 
    print("could not open url, it was nil") 
} 

Если это не делает трюк, у вас может возникнуть проблема с элементом element.Name. Поэтому я бы посмотрел, будет ли это необязательно, если у вас все еще есть проблемы.

Update

я добавил возможный способ проверить свойство element.Name, чтобы увидеть, если вы можете привести его в виде строки и создать нужный адрес, который вы ищете, чтобы создать. Вы можете увидеть код выше кода, который я ранее размещал.

+0

Это разрешает ошибку, а не причину ошибки. Я уверен, что цель состоит в том, чтобы получить действительный URL. – rmaddy

+0

не могли бы вы объяснить, пожалуйста? Если он/она не получает от него действительный URL-адрес, я бы посмотрел следующий элемент element.Name. – user3353890

+0

OP хочет создать URL-адрес с помощью 'element.Name'. Как есть, это приводит к тому, что URL-адрес будет «nil», что приведет к сбою. Ваш ответ просто предотвращает крах, но он не решает проблему создания URL-адреса по своему усмотрению. – rmaddy

0

это может быть проблема с кодировкой. вы пробовали

let str = "http://en.wikipedia.org/wiki/\(element.Name)" 
let encodedStr = str.stringByAddingPercentEncodingWithAllowedCharacters(NSCha‌​racterSet.URLQueryAl‌​lowedCharacterSet() 
2

I think this will help. Your element.name may contain space between words so addingPercentEncoding make PercentEncoding string.

let txtAppend = (element.Name).addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) 
let url = "http://en.wikipedia.org/wiki/\(txtAppend!)" 
let openUrl = NSURL(string: url) 
if #available(iOS 10.0, *) { 
    UIApplication.shared.open(openUrl as! URL, options: [:], completionHandler: nil) 
} else { 
    UIApplication.shared.openURL(openUrl as! URL) 
}