I made a class to manage saved file in drive with Swift, and I tried to do the best work.
Can someone get me a feedback about this class? What can I improve? Is this a good way to save a file?
import UIKit
class TCFileData:NSObject, NSCoding
{
override init() {
}
required init(coder aDecoder: NSCoder) {
}
func encodeWithCoder(aCoder: NSCoder) {
fatalError("encodeWithCoder(aCoder: NSCoder:) has not been implemented");
}
}
struct TCFile {
static func save<T:TCFileData>(#name:String, object:T)->Bool
{
let path = getPath(name);
let saveData = NSKeyedArchiver.archivedDataWithRootObject(object);
return saveData.writeToFile(path as String, atomically: true);
}
static func save<T:TCFileData>(object:T)->Bool
{
return save(name: NSStringFromClass(object.classForCoder), object: object);
}
static func hasFile(#name:String)->Bool
{
return NSFileManager.defaultManager().fileExistsAtPath(getPath(name) as String);
}
static func hasFile<T:TCFileData>(classType:T.Type)->Bool
{
return hasFile(name: getFileName(classType));
}
static func loadFile<T:TCFileData>(#name:String, classType:T.Type)->T!
{
var data:T?;
if(hasFile(name: name))
{
if let rawData = NSData(contentsOfFile: getPath(name) as String) {
var object: AnyObject? = NSKeyedUnarchiver.unarchiveObjectWithData(rawData);
data = object as? T;
}
}
return data;
}
static func loadFile<T:TCFileData>(classType:T.Type)->T!
{
return loadFile(name: getFileName(classType), classType:classType);
}
static func loadFile<T:TCFileData>()->T!
{
return loadFile(name: getFileName(T.self), classType:T.self);
}
static func remove(#name:String)->Bool
{
if(hasFile(name: name))
{
return NSFileManager.defaultManager().removeItemAtPath(getPath(name) as String, error: nil);
}
return false;
}
static func remove<T:TCFileData>(classType:T.Type)->Bool
{
return remove(name: getFileName(classType));
}
static private func getPath(file:String)->NSString
{
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) as NSArray;
let documentsDirectory = paths.objectAtIndex(0) as! NSString;
let path = documentsDirectory.stringByAppendingPathComponent(file);
return path;
}
static private func getFileName<T:TCFileData>(classType:T.Type)->String
{
return NSStringFromClass(classType.self.classForCoder());
}
}