2017-03-14 11 views
1

私は、カロリー、脂肪、炭水化物、およびタンパク質を保持するカスタムのStructクラスを持っています。STRUCT配列からUserDefaultsへ

たびに、ユーザは、私は今、私はまた、すべてを格納する配列を作成した変数

var theArray : NSMutableArray = [] 

struct CFCPstruct { 
    let calories : Int! 
    let fats : Int! 
    let carbs : Int! 
    let protein: Int! 
    init(Calories: Int, Fats: Int, Carbs: Int, Protein: Int) { 
     self.calories = Calories 
     self.fats = Fats 
     self.carbs = Carbs 
     self.protein = Protein 
    } 
} 

let addLog = [CFCPstruct(Calories: totalCalories, Fats: totalFats, Carbs: totalCarbs, Protein: totalProtein)] 

に入れてデータを入力します。私はすべての値を配列に格納し、それをUserDefaultsに格納する必要があります。

それから私は、ユーザーのデフォルトは配列を呼び出す呼び出す必要があります[0]、と言った後、それぞれのカロリーを呼び出し、炭水化物... thelog.caloriesのようなもの// theology.carbsなど

答えて

2

のことができるようにするにすることができますNSCodingを使用してください。オブジェクトはクラスでなければなりません。しかし、すべての値がプロパティリストに準拠しているので、変数dictionaryRepresentationと対応するイニシャライザを追加できます。すべてスウィフトで決して使用NSMutableArray

まず非オプションの初期化子で初期化されている暗黙の開封されたオプションとして変数を宣言することはありません

var theArray = [CFCPstruct]() 

struct CFCPstruct { 
    let calories : Int 
    let fats : Int 
    let carbs : Int 
    let protein: Int 

    init(calories: Int, fats: Int, carbs: Int, protein: Int) { 
     self.calories = calories 
     self.fats = fats 
     self.carbs = carbs 
     self.protein = protein 
    } 

    init(dictionary : [String:Int]) { 
     self.calories = dictionary["calories"]! 
     self.fats = dictionary["fats"]! 
     self.carbs = dictionary["carbs"]! 
     self.protein = dictionary["protein"]! 
    } 

    var dictionaryRepresentation : [String:Int] { 
     return ["calories" : calories, "fats" : fats, "carbs" : carbs, "protein" : protein] 
    } 
} 

これで、ユーザーのデフォルトとの間でアレイを読み書きできます。

func saveDefaults() 
{ 
    let cfcpArray = theArray.map{ $0.dictionaryRepresentation } 
    UserDefaults.standard.set(cfcpArray, forKey: "cfcpArray") 
} 

func loadDefaults() 
{ 
    theArray = (UserDefaults.standard.object(forKey: "cfcpArray") as! [[String:Int]]).map{ CFCPstruct(dictionary:$0) } 
} 
-1

、あなたのデータの配列を作成した場合、あなたは次のようにそれを保存することができます: -

yourArrayOfDict = [[ "A" しましょう: "スミス"、 "B": "UK"]、[ "A": "ポール"、 "B": "UAE"]]

スウィフト3:

let defaults = UserDefaults.standard 
defaults.set(yourArrayOfDict, forKey: "customKey_SavedArray") 
配列が保存されていることを確認するためにあなたはSであなたの値を取得します

let s = defaults.value(forKey: "customKey_SavedArray") 
print(s) 

ので、あなたのことができprint(s)者:今

、あなたはアクセスそれら

スウィフト2:

let defaults = NSUserDefaults.standardUserDefaults() 
defaults.setValue(yourArrayOfDict, forKey: "customKey_SavedArray") 

がアクセスそれら

let s = defaults.objectForKey("customKey_SavedArray") as? [[String:AnyObject]] 

、ここでSはあなたのデータの配列として値を保持していないので、あなたが使用してそれらにアクセスすることができます何もあなたが言ったように、 let first_item = s[0]for inを使用して配列内のアイテムをループすることができますループ。

関連する問題