JSONからのデータを配列に保存しようとしていますが、最後の項目は前の値を上書きします。私は学生情報を格納するためのStudentクラスと、学生のスキルを格納するためのSkillクラスを持っています。私の配列の最後の要素は、すべての前の要素を上書きします
public class Skill {
public var id : Int = 0
public var name : String = ""
public var level : Double = 0.0
func description() -> String {
return "ID: \(id), " +
"name: \(name), " +
"level: \(level)"
}
}
学生クラス
public class Student {
public var studentSkills = Array<Skill>()
func setCursusUsers(data: [[String: AnyObject]]) {
for item in data {
let skills = Skill()
if let resData = item["skills"] {
let stu_data = resData as! [[String: AnyObject]]
for skill_item in stu_data {
skills.id = skill_item["id"] as? Int ?? 0
skills.level = skill_item["level"] as? Double ?? 0.0
skills.name = skill_item["name"] as? String ?? ""
studentSkills.append(skills)
print(studentSkills[studentSkills.count - 1].description())
}
for skill in studentSkills {
print(skill.description())
}
}
}
}
}
Iスキルの配列をループし、それが私のstudentSkills
配列に追加し、最後に追加される値と正しい値を印刷するには、プリントアウトされます。
for skill_item in stu_data {
skills.id = skill_item["id"] as? Int ?? 0
skills.level = skill_item["level"] as? Double ?? 0.0
skills.name = skill_item["name"] as? String ?? ""
studentSkills.append(skills)
print(studentSkills[studentSkills.count - 1].description())
}
for
ループ内で上記print
からの出力
ID: 16, name: Company experience, level: 11.34
ID: 4, name: Unix, level: 7.4
ID: 17, name: Object-oriented programming, level: 4.59
ID: 3, name: Rigor, level: 3.24
ID: 7, name: Group & interpersonal, level: 3.02
ID: 2, name: Imperative programming, level: 2.98
ID: 6, name: Web, level: 2.32
ID: 13, name: Organization, level: 1.8
ID: 14, name: Adaptation & creativity, level: 1.14
ID: 5, name: Graphics, level: 1.12
ID: 10, name: Network & system administration, level: 0.98
ID: 12, name: DB & Data, level: 0.87
ID: 15, name: Technology integration, level: 0.82
ID: 1, name: Algorithms & AI, level: 0.76
ID: 11, name: Security, level: 0.45
私は上記for
ループ
for skill in studentSkills {
print(skill.description())
}
外次のコードを実行すると、私は次のような出力
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 7, name: Group & interpersonal, level: 0.21
ID: 7, name: Group & interpersonal, level: 0.21
ID: 7, name: Group & interpersonal, level: 0.21
ID: 7, name: Group & interpersonal, level: 0.21
を取得
これは私がこの問題を解決することができますどのように、私のJSON
"cursus_users" : [
{
"skills" : [
...,
...,
...,
...,
...,
...,
...,
...,
{
"id" : 11,
"name" : "Security",
"level" : 0.45
}
],
...
},
{
"skills" : [
...,
...,
...,
{
"id" : 7,
"name" : "Group & interpersonal",
"level" : 0.21
}
],
...
}
]
スキルの配列の最後の要素が前の要素を上書きする構造でありますか?
'class Student'は*参照型です*すべての配列要素は*同じインスタンスへの参照です* - これは前に尋ねられ、返答されていなければなりません... –
https://stackoverflow.com/の可能な複製質問/ 36000146/swift-array-append-overwriting-other-array-valuesのようになります。 –
ありがとうマーティンR、私は迅速に新しいです。 – julekgwa