展开可选值Swift

时间:2015-12-01 04:32:33

标签: ios swift

我要在我的webview中加载html文件。这些文件包含对/css/images子目录的引用。所以,我从this answer找到了以下内容。

    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在第二行。

2 个答案:

答案 0 :(得分: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)
}

在Swift 2函数中使用guard,如下所示:

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创建新的范围。

答案 1 :(得分:0)

您应该使用NSBundle方法URLForResource:

> df
   Value Year     Range       Avg
1     12 1906 1900-1910 15.333333
2     15 1909 1900-1910 15.333333
3      7 1911 1911-1920  6.666667
4     22 1950 1941-1950 12.500000
5      4 1917 1911-1920  6.666667
6      9 1917 1911-1920  6.666667
7     19 1902 1900-1910 15.333333
8      1 1921 1921-1930  1.000000
9      2 1931 1931-1940  2.000000
10     3 1941 1941-1950 12.500000
11     4 1951 1951-1960  4.000000
12     5 1961 1961-1970  5.000000
13     6 1971 1971-1980  6.000000
14     7 1981 1981-1990  7.000000
15     8 1991 1991-2000 15.333333