Skip to content

Instantly share code, notes, and snippets.

@masakid
Created August 1, 2015 01:29
Show Gist options
  • Save masakid/2ca9db2bda03cb418e70 to your computer and use it in GitHub Desktop.
Save masakid/2ca9db2bda03cb418e70 to your computer and use it in GitHub Desktop.
課題18
//
// CommonData.swift
// KadaiCheck
//
import UIKit
class CommonData: NSObject {
var fruitsArr: Array<CheckRecord> = []
//【入門】Part61 struct(構造体)の使い方参照
//【入門】Part65 構造体にメソッド作成参照
struct CheckRecord {
var name:String
var check:Bool
func dictionary() -> Dictionary<String, Any> {
let keyName = "Name"
let keyCheck = "Check"
return [keyName: name, keyCheck: check]
}
}
//NSUserDefaultsにデータを保存するメソッド
func saveUserDefaults(){
//デフォルトオブジェクトの呼び出し
let defaults = NSUserDefaults.standardUserDefaults()
//checkDataというキー名でCheckRecord型の構造体配列を保存
// let archiveData = NSKeyedArchiver.archivedDataWithRootObject(fruitsArr)
//構造体のリストをDictionaryの配列へ変換(関数型っぽい書き方にしてみた)
var paramList = fruitsArr.reduce(Array<Dictionary<String, Any>>()) { (var list, q) in
list.append(q.dictionary())
return list
}
//保存処理
//UserDefaultsが使い勝手悪いので
//保存する配列の最大長を保持
defaults.setInteger(paramList.count, forKey: "count")
//最大長まで連番でどんなデータがあるかを保持
for (index , paramDic) in enumerate(paramList) {
defaults.setObject(paramDic["Name"] as! String, forKey: "String=\(index)")
defaults.setBool(paramDic["Check"] as! Bool, forKey: "Bool=\(index)")
}
//保存完了
defaults.synchronize()
}
//UserDefaultsからデータ取得
func getUserDefaultsData() {
//デフォルトオブジェクトの呼び出し
let defaults = NSUserDefaults.standardUserDefaults()
//配列の最大長が保存されていれば取得処理開始
if let count = defaults.stringForKey("count") {
fruitsArr = Array<CheckRecord>()
for (var i = 0 ; i < count.toInt()! ; i++){
appendFruitsWithName(defaults.stringForKey("String=\(i)")!, isCheck: defaults.boolForKey("Bool=\(i)"))
}
}
}
func appendFruitsWithName(name:String, isCheck:Bool){
fruitsArr.append(CheckRecord(name: name, check: isCheck))
//設定データを更新時に毎回保存
saveUserDefaults()
}
//共通データリストの更新
func updateFruitsWithName(name:String, oldName:String, isCheck:Bool){
var newfruitsArr: Array<CheckRecord> = []
let keyFruitsCheck = CheckRecord(name: name, check: isCheck)
for dicSet in fruitsArr {
if dicSet.name == oldName {
newfruitsArr.append(keyFruitsCheck)
} else {
newfruitsArr.append(dicSet)
}
}
fruitsArr = newfruitsArr
//設定データを更新時に毎回保存
saveUserDefaults()
}
//削除メソッド
func removeFruitsWithRow(indexRow: Int){
fruitsArr.removeAtIndex(indexRow)
//設定データを更新時に毎回保存
saveUserDefaults()
}
//番号を指定して取得
//indexPath.rowを渡したら、対応する行が返却される
func displayRowNumberFruits(fruitsNum:Int) -> (name:String, isCheck:Bool){
let fruitRecord = self.fruitsArr[fruitsNum]
return (fruitRecord.name, fruitRecord.check)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment