问题描述
我有一个从 url 获取的 JSON 数组并使用 SwiftyJSON 进行转换。现在我想为某些功能更新 JSON 数组的一些值。
我的 JSON 就像
[
{
"id" : 48845152,"studentPhotoTakenCount" : 0,"updatedAt" : null,"isAttendedToday: false
},{ "id" : 48845153,]
一些操作后,我想通过过滤 id 来更新我的 JSON 数组。 就像如果我有 id = 48845152 那么只更新
{
"id" : 48845152,"isAttendedToday: false
}
最后与我的 JSON 数组合并。所以最后的结果应该是
[
{
"id" : 48845152,]
我的代码就是这样。
self.studentList.forEach {
if let id = $0["id"].int {
if id == _studentId {
$0["isAttendedToday"] = true
self.filteredStudentList.append($0)
}
else {
self.filteredStudentList.append($0)
}
}
}
这里 self.studentList
是我的 JSON。但我收到错误说
不能通过下标赋值:'$0'是不可变的
请有人帮我找出这里出了什么问题。
解决方法
使用此语法,您无法修改源数组,但可以修改目标数组
self.studentList.forEach {
self.filteredStudentList.append($0)
if let id = $0["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
}
}
在这两种情况下,由于值类型语义,您必须直接修改数组。
附注:
在 Swift 5 中没有理由再使用 SwiftyJSON
。 Codable
更通用、更高效和内置。