在 Swift 5 中更新 JSON 数组
Update JSON Array in Swift 5
我有一个从 url 获取的 JSON 数组,并使用 SwiftyJSON 进行转换。现在我想为某些功能更新 JSON 数组的一些值。
我的JSON就像
[
{
"id" : 48845152,
"studentPhotoTakenCount" : 0,
"updatedAt" : null,
"isAttendedToday: false
},
{ "id" : 48845153,
"studentPhotoTakenCount" : 0,
"updatedAt" : null,
"isAttendedToday: false
},
]
经过一些操作后,我想通过过滤 ID 来更新我的 JSON 数组。
就像我有 id = 48845152 然后只更新
{
"id" : 48845152,
"studentPhotoTakenCount" : 0,
"updatedAt" : null,
"isAttendedToday: false
}
并最终与我的 JSON 数组合并。所以最后的结果应该是
[
{
"id" : 48845152,
"studentPhotoTakenCount" : 0,
"updatedAt" : null,
"isAttendedToday: false
},
{ "id" : 48845153,
"studentPhotoTakenCount" : 0,
"updatedAt" : null,
"isAttendedToday: false
},
]
我的代码就是这样。
self.studentList.forEach {
if let id = [=15=]["id"].int {
if id == _studentId {
[=15=]["isAttendedToday"] = true
self.filteredStudentList.append([=15=])
}
else {
self.filteredStudentList.append([=15=])
}
}
}
这里 self.studentList
是我的 JSON。但是我得到的错误是
Cannot assign through subscript: '[=17=]' is immutable
请有人帮我找出这里出了什么问题。
使用此语法无法修改源数组,但可以修改目标数组
self.studentList.forEach {
self.filteredStudentList.append([=10=])
if let id = [=10=]["id"].int, id == _studentId {
let lastIndex = self.filteredStudentList.count - 1
self.filteredStudentList[lastIndex]["isAttendedToday"] = true
}
}
如果要修改源数组,则必须使用此
for (index, item) in self.studentList.enumerated() {
self.filteredStudentList.append(item)
if let id = item["id"].int, id == _studentId {
self.studentList[index]["isAttendedToday"] = true
}
}
在这两种情况下,由于值类型语义,您必须直接修改数组。
PS:
在 Swift 5 中,没有理由再使用 SwiftyJSON
。 Codable
更通用、更高效且内置。
我有一个从 url 获取的 JSON 数组,并使用 SwiftyJSON 进行转换。现在我想为某些功能更新 JSON 数组的一些值。
我的JSON就像
[
{
"id" : 48845152,
"studentPhotoTakenCount" : 0,
"updatedAt" : null,
"isAttendedToday: false
},
{ "id" : 48845153,
"studentPhotoTakenCount" : 0,
"updatedAt" : null,
"isAttendedToday: false
},
]
经过一些操作后,我想通过过滤 ID 来更新我的 JSON 数组。 就像我有 id = 48845152 然后只更新
{
"id" : 48845152,
"studentPhotoTakenCount" : 0,
"updatedAt" : null,
"isAttendedToday: false
}
并最终与我的 JSON 数组合并。所以最后的结果应该是
[
{
"id" : 48845152,
"studentPhotoTakenCount" : 0,
"updatedAt" : null,
"isAttendedToday: false
},
{ "id" : 48845153,
"studentPhotoTakenCount" : 0,
"updatedAt" : null,
"isAttendedToday: false
},
]
我的代码就是这样。
self.studentList.forEach {
if let id = [=15=]["id"].int {
if id == _studentId {
[=15=]["isAttendedToday"] = true
self.filteredStudentList.append([=15=])
}
else {
self.filteredStudentList.append([=15=])
}
}
}
这里 self.studentList
是我的 JSON。但是我得到的错误是
Cannot assign through subscript: '[=17=]' is immutable
请有人帮我找出这里出了什么问题。
使用此语法无法修改源数组,但可以修改目标数组
self.studentList.forEach {
self.filteredStudentList.append([=10=])
if let id = [=10=]["id"].int, id == _studentId {
let lastIndex = self.filteredStudentList.count - 1
self.filteredStudentList[lastIndex]["isAttendedToday"] = true
}
}
如果要修改源数组,则必须使用此
for (index, item) in self.studentList.enumerated() {
self.filteredStudentList.append(item)
if let id = item["id"].int, id == _studentId {
self.studentList[index]["isAttendedToday"] = true
}
}
在这两种情况下,由于值类型语义,您必须直接修改数组。
PS:
在 Swift 5 中,没有理由再使用 SwiftyJSON
。 Codable
更通用、更高效且内置。