2015-12-01 4 views
0

Я загружаю html-файл в свой веб-просмотр. Файлы содержат ссылки на подкаталоги /css и /images. Итак, я нашел следующее от this answer.Unwrapping a Необязательное значение Swift

let path: String? = NSBundle.mainBundle().pathForResource("Ace-VetBolus", ofType: "html", inDirectory: "HTMLFiles") 
    let requestURL = NSURL(string:path!); 
    let request = NSURLRequest(URL:requestURL!); 

    web1.loadRequest(request) 

И я не могу решить эту проблему: fatal error: unexpectedly found nil while unwrapping an Optional value на второй линии.

+0

Как я уже на второй строке –

ответ

0

Вы должны использовать метод NSBundle URLForResource:

if let url = NSBundle.mainBundle().URLForResource("Ace-VetBolus", withExtension: "html", subdirectory: "HTMLFiles") { 
    let requestURL = NSURLRequest(URL: url) 
    web1.loadRequest(requestURL) 
} 
1

Использование ! принудительно разворачивает значение, поэтому, если оно nil, вы получите фатальную ошибку, как видите.

Вы хотите использовать инструкцию if let или инструкцию guard.

let path: String? = NSBundle.mainBundle().pathForResource("Ace-VetBolus", ofType: "html", inDirectory: "HTMLFiles") 
if let unwrappedPath = path { 
    let requestURL = NSURL(string: unwrappedPath) 
    let request = NSURLRequest(URL: requestURL) 

    web1.loadRequest(request) 
} 

Использование guard в Swift 2 функции следующим образом:

let path: String? = NSBundle.mainBundle().pathForResource("Ace-VetBolus", ofType: "html", inDirectory: "HTMLFiles") 
guard let unwrappedPath = path else { 
    return // or handle fail case some other way 
} 
let requestURL = NSURL(string: unwrappedPath) 
let request = NSURLRequest(URL: requestURL) 
web1.loadRequest(request) 

Крупнейшая другая является guard модель позволяет сохранить развернутую переменную в том же объеме, в то время как if let создает новую область.

+0

NSURL (строка :) это только для веб-ссылки, а не для местных ресурсов. При создании NSURL для локальных файловых ресурсов вам нужно использовать init (fileURLWithPath путь: String). https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSURL_Class/#//apple_ref/occ/instm/NSURL/initFileURLWithPath: –

+0

Достаточно справедливо, я просто смотрел на конкретные вопрос, а не базовые API. :) –

+0

Нет, я понял ваш комментарий, я говорю, что я просто обернул его наивно в if, если предположить, что OP правильно использовал API. В следующий раз я посмотрю ближе. :) –

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