Created
August 1, 2015 01:29
-
-
Save masakid/2ca9db2bda03cb418e70 to your computer and use it in GitHub Desktop.
課題18
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// 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