2016-04-22 7 views
-1

Ich habe eine statische Funktion, die nur liest ein Sicherheitsziel Lesezeichen von NSUserdefaults. Wie folgt:Was zurückgegeben werden soll, wenn ein NSURL zu null führt

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

Ich meine, ich muss mindestens etwas zurückgeben oder nicht?

+0

Sie sollten behandeln entweder erstellen oder spezielle Design in Bezug auf die zurückgegebene Wert einer Funktion folgen. Nun, ich habe keine Ahnung, was Ihre 'desktopURL' ist, daher ist alles, was Sie zurückgeben wollen, akzeptabel, da Sie in diesem Fall Ihre eigene API erstellen. –

+0

@ user57213 Eine schlaue Art, Dinge zu tun, kann auch das Auslösen einer Ausnahme beinhalten. –

+0

Wie würdest du das machen? – user57213

Antwort

0

Der beste Weg, um mit diesen Situationen fertig zu werden, besteht darin, den Rückgabetyp als optional zu definieren. Dann können Sie nil zurückgeben, wenn Ihre desktopData gleich null ist. Es ist in der Regel einfacher, die Logik für eine Null-Antwort in der Funktion Aufruf dieser Funktion

Eg

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

Ah! guter Punkt! Daran habe ich nicht gedacht. ziemlich einfach. Vielen Dank! – user57213

+0

Kein Problem :) Ich bin froh, dass ich helfen konnte. Würde es Ihnen etwas ausmachen, meine Antwort als akzeptierte Antwort zu markieren? Ich bekomme Rep-Punkte dafür: P –

Verwandte Themen