2016-04-22 2 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

Вы должны либо создать или следовать конкретной конструкции в отношении возвращаемого значения какой-либо функции. Теперь я не имею ни малейшего представления о том, что представляет собой ваш рабочий стол, поэтому все, что вы хотите вернуть, приемлемо, поскольку в этом случае вы создаете свой собственный API. –

+0

@ user57213 Небольшой способ сделать вещи также может включать в себя исключение. –

+0

как бы вы это сделали? – user57213

ответ

0

Лучший способ справиться с этими ситуациями - сделать ваш тип возврата необязательным, тогда вы можете вернуть нуль, если ваш desktopData равен нулю. Это, как правило, легче обрабатывать логику нильпотока ответа в функции вызова этой функции

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

Ах! хорошая точка зрения! Не думал об этом. довольно прямолинейно. Спасибо! – user57213

+0

Ничего страшного :) Рад, что я мог бы помочь. Не могли бы вы отметить мой ответ как принятый ответ? Я получаю ответы за это: P –

Смежные вопросы