2016-04-22 46 views
-1

我有一個靜態函數,它只是從NSUserdefaults中讀取安全範圍的書籤。像這樣:當NSURL結果爲零時返回什麼

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 
    } 
} 

我的意思是我需要返回至少一些東西嗎?

+0

您應該創建或按照關於任何函數的返回值的具體設計。現在,我不知道你的'desktopURL'是什麼,因此你想要返回的任何東西都是可以接受的,因爲你在這種情況下創建了自己的API。 –

+0

@ user57213做事情的快捷方式還可以包括拋出異常。 –

+0

你會怎麼做? – user57213

回答

0

處理這些情況的最佳方法是讓您的返回類型爲可選,如果您的desktopData爲零,則可以返回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 
    } 
} 
+0

啊!好點子!沒有想到這一點。非常直截了當。謝謝! – user57213

+0

完全沒問題:)很高興我能幫上忙。你介意將我的答案標記爲已接受的答案嗎?我得到它的代表點:P –