NSSearchPathForDirectoriesInDomains(directory: NSSearchPathDirectory, _ domainMask: NSSearchPathDomainMask, _ expandTilde: Bool) -> [String]
通过调用NSSearchPathForDirectoriesInDomains方法,可以得到一个[String]数组。这个数组的第一个数据[0]就是当前App下路径。
NSMutableData.appendData(other: NSData)
我们可以通过创建一个NSMutableData实例,然后调用其appendData方法去动态添加数据。搞过Java或者Android的,都应该经常接触到StringBuilder,StringBuffer,这里的NSMutableData类似于这样的角色,但是至于线程安全问题,无从调查,因为目前不开源。
NSData.writeToFile(path: String, atomically useAuxiliaryFile: Bool) -> Bool
NSMutableData是NSData的子类,所以NSMutableData的对象也能调用writeToFile去将自身的内容存储为一个文件。
NSString : public convenience init(contentsOfURL url: NSURL, encoding enc: UInt) throws
这是NSString中用convenience
- 便利 关键字定义的一个便利构造方法,这个方法是要依赖于NSString其他的init方法。通过这个构造方法可以根据一个文件的url,将该文件的内容实例为一个NSString实例对象,从而也能达到读文件的效果。
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
// 用于获取当前App下路径
var sp:[String] = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true)
// 大于0,则表示着取到了路径
if(sp.count > 0){
let url = NSURL(fileURLWithPath: "\(sp[0])/data.txt")
// NSMutableData可以动态添加数据
let data:NSMutableData = NSMutableData()
// 添加数据
data.appendData("Save you from anything".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)!)
// 写文件
data.writeToFile(url.path!, atomically: true)
NSLog("\(url)")
// NSString构造方法可以根据一个文件的url,去把文件中的内容转换为NSString类型
do {
// 读文件
let strData:NSString = try NSString(contentsOfURL: url, encoding: NSUTF8StringEncoding)
NSLog("read: \(strData)")
}
catch let error as NSError {
NSLog("\(error.localizedDescription)")
}
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
还是那句话!搞过Android的都知道SharedPreferences的存在,这里的NSUserDefaults和SharedPreferences一样,处理的就是一个key-value(键值对)。都适合存储一些少量的信息(如:App中的一些设置选项,保存下来)。
存储数据
NSUserDefaults.setObject(value: AnyObject?, forKey defaultName: String)
读取数据
NSUserDefaults.objectForKey(defaultName: String) -> AnyObject?
class ViewController: UIViewController {
@IBOutlet weak var mSwitch: UISwitch!
@IBOutlet weak var show: UILabel!
var ud:NSUserDefaults!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.ud = NSUserDefaults.standardUserDefaults()
// 通过key读取数据,设置UISwitch打开状态
self.mSwitch.on = self.ud.boolForKey("switch")
self.setShow()
}
// 设置UISwitch文本提示
func setShow(){
if(self.mSwitch.on){
self.show.text = "已打开"
}else{
self.show.text = "未打开"
}
}
// UISwitch状态改变事件监听
@IBAction func switchChanged(sender: AnyObject) {
// 通过key存储数据
self.ud.setBool(self.mSwitch.on, forKey: "switch")
self.setShow()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}