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を呼び出して自身のコンテンツを1つのファイルとして格納することができる.
    NSString : public convenience init(contentsOfURL url: NSURL, encoding enc: UInt) throws
    これはNSStringでconvenience-便利キーワードで定義された便利な構造方法であり、この方法はNSStringの他のinit方法に依存する.この構成方法により、1つのファイルの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.
        }
    
    }