您的位置:首页 > 移动开发 > Swift

10.Swift 数据存取

2015-10-07 16:22 447 查看

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

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

}


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

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据 nsstring 存储 swift