I have written a helper struct for saving and loading stuff to NSUserDefaults.
import UIKit
struct Database {
    static let defaults = NSUserDefaults.standardUserDefaults()
    static var myVariable: AnyObject?
    static func save() {
        defaults.setObject(myVariable, forKey: "myVariable")
    }
    static func load() {
        if let myVariable = defaults.objectForKey("myVariable") {
            self.myVariable = myVariable
        }
    }
    static func clear() {
        defaults.removeObjectForKey("myVariable")
    }
}
Now I can simply use Database.load() to load myVariable from NSUSerDefaults.
However, the same is achievable with this code:
struct Database2 {
    static var sharedInstance = Database()
    let defaults = NSUserDefaults.standardUserDefaults()
    var myVariable: AnyObject?
    func save() {
        defaults.setObject(myVariable, forKey: "myVariable")
    }
    func load() {
        if let myVariable = defaults.objectForKey("myVariable") {
            self.myVariable = myVariable
        }
    }
    func clear() {
        defaults.removeObjectForKey("myVariable")
    }
}
Now I would use Database2.sharedInstance.load(). 
Which one is seen as a better practice and why? What's the use of a sharedInstance, if I can do everything I want with the static declaration?