当 NSURL 结果为 nil 时 return 怎么办

What to return when a NSURL results in nil

我有一个静态函数,它只从 NSUserdefaults 读取一个安全范围的书签。像这样:

static func desktopURL()->NSURL {
    let desktopData = NSUserDefaults.standardUserDefaults().dataForKey("desktopSecurityBookmark")
    if (desktopData != nil){
        let desktop = try! NSURL(byResolvingBookmarkData: desktopData!, options: NSURLBookmarkResolutionOptions.WithSecurityScope, relativeToURL: nil, bookmarkDataIsStale: nil)
        desktop.startAccessingSecurityScopedResource()
        return desktop
    } else {
        // what the heck to return when URL was not set in the first place??
        let desktopNil = NSURL() // :D ??? I need to return at leas something or not? 
        return desktopNil
    }
}

我的意思是我至少需要 return 做些什么?

处理这些情况的最佳方法是使您的 return 类型可选,然后如果您的 desktopData 为 nil,则可以 return nil。在调用此函数的函数中处理 nil 响应的逻辑通常更容易

例如

static func desktopURL() -> NSURL? {
    if let desktopData = NSUserDefaults.standardUserDefaults().dataForKey("desktopSecurityBookmark")
    {
        let desktop = try! NSURL(byResolvingBookmarkData: desktopData!, options: NSURLBookmarkResolutionOptions.WithSecurityScope, relativeToURL: nil, bookmarkDataIsStale: nil)
        desktop.startAccessingSecurityScopedResource()
        return desktop
    } else {
        return nil 
    }
}