10.Swift 数据存取

10.Swift 数据存取

  • Swift 数据存取
    • NSData存储文件 NSString读取文件
    • NSUserDefaults存取数据

NSData存储文件 NSString读取文件

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将自身的内容存储为一个文件

NSStringpublic 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.
    }

}

NSUserDefaults存取数据

还是那句话!搞过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.
    }

}

你可能感兴趣的:(数据,存储,swift,NSString)