NSUserDefaults类提供了一个默认的系统编程接口进行交互 一般用来保存应用程序相关的偏好设置 配置数据等 通过键值对来存储数据 一般用来存储单条数据
//通过单例来创建NSuserDefaults的对象 var userDefault = NSUserDefaults.standardUserDefaults() //也可以通过初始化方法 参数suitname标示该对象的组名称 var userDefault1 = NSUserDefaults(suiteName: "SwiftClass") //输出所有的键值对 print(userDefault.dictionaryRepresentation())
//判断nsuserDefaluts的appMessage 在dictionaryRepression中是否存在 //不存在就设置为this is app message if userDefault.objectForKey("appMessage") == nil { userDefault.setObject("this is my default message", forKey: "appMessage") //获取某个key的值 var dic = userDefault.dictionaryRepresentation() var object_one = (dic as NSDictionary).objectForKey("AppleKeyBoards") //或者 var object_two = dic["AppleKeyBoards"] //需要解包才能使用object对象 if let ovalue = object_one { print(ovalue) } }
//一些非常方便的方法来设置和获取常用的类型 userDefault.setInteger(123456, forKey: "Int") //读取 var intValue = userDefault.integerForKey("Int") print(intValue) //float类型的 userDefault.setFloat(3.2, forKey: "float") var floatValue = userDefault.floatForKey("float") print(floatValue) //double类型的 userDefault.setDouble(5.6, forKey: "Double") var doubleValue = userDefault.doubleForKey("Double") //bool类型的 userDefault.setBool(true, forKey: "Bool") var boolValue = userDefault.boolForKey("Bool") print(boolValue) //NSURL类型的 地址类型的 userDefault.setURL(NSURL(string: "http://www.baidu.com"), forKey: "url") var urlValue = userDefault.URLForKey("url")
系统对象实现存储,需要通过archivedDataWithRootObject方法转化成为NSDate作为载体 才可以存储
//转化成NSData流 var imageData = NSKeyedArchiver.archivedDataWithRootObject(UIImage(named: "swift.png")!) //存储为NSData对象 userDefault.setObject(imageData, forKey: "imageData")
//获取对象的方法 //获取NSData var objData = userDefault.objectForKey("imageData") //还原对象 var myImage = NSKeyedUnarchiver.unarchiveObjectWithData(objData as! NSData) //输出对象 print(myImage)
//删除操作 var ar:NSDictionary = userDefault.dictionaryRepresentation() for key in ar.allKeys { userDefault.removeObjectForKey(key as! String) //内存中的数据同步跟新到数据库中 userDefault.synchronize()文件的操作
获取HOME目录
//获取程序的home目录 let homeDirectory = NSHomeDirectory() print(homeDirectory)
获取document目录
let documentPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true) let documentPaths = documentPath[0] as String //或者通过home目录自己添加文件夹 var documentPath2 = homeDirectory + "/Documents" print(documentPath2)
library/caches 主要放置一些缓存的文件 itunes不会备份此目录
//获取library目录 let libraryPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.LibraryDirectory, NSSearchPathDomainMask.AllDomainsMask, true) let library = libraryPath[0] as String //或通过home进行追加 let library2 = homeDirectory + "/Library" //获取cache目录 let catchpath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.CachesDirectory, NSSearchPathDomainMask.AllDomainsMask, true) let catchPath1 = catchpath[0] as String //或通过home目录追加 let catchPath2 = homeDirectory + "/Library/Caches"
let tmpDir = NSTemporaryDirectory() //或通过home目录进行追加 var tmpDir2 = homeDirectory + "/tmp"
//创建文件管理器 var fileManager = NSFileManager.defaultManager() //对于文件的操作有可能会有错误的生成 因此要定义一个错误 var error:NSError? //创建目录 自定义的 let myFile = homeDirectory + "/Documents/myFolder/Images" //创建目录 withIntermediateDirectories要设置为true 代表中间路径如果不存在的话 会创建这样的路径 do {var isSuccess = try fileManager.createDirectoryAtPath(myFile, withIntermediateDirectories: true, attributes: nil) } catch{ print("error") } }
//创建文件 var filePath = myFile + "/appInfo.txt" var info = "caokaiqnag" do { try info.writeToFile(filePath, atomically: true, encoding: NSUTF8StringEncoding) } catch{ print("error") }
通过文件管理器来处理
var exist = fileManager.fileExistsAtPath("filePath")
do {try fileManager.moveItemAtPath(filePath2, toPath: filePath) } catch{ print("error") }
var filePath4 = NSHomeDirectory() do {try fileManager.copyItemAtPath("filePath", toPath: filePath4) } catch{ print("error") }
var filePath5 = fileManager.subpathsAtPath(NSHomeDirectory())