当 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
}
}
我有一个静态函数,它只从 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
}
}