微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

查找特定项目并更改模型中的值-Swift

如何解决查找特定项目并更改模型中的值-Swift

我正在尝试更改模型中的值或更新值,但是由于某些未知原因,它没有更新值。 我已经通过匹配id准确地找到了该行,但是之后该值没有更新。 我想更新bgColor模型中的Item

减速:var AppDetailData : AppointmentDetail?

我的代码

for var i in AppDetailData?.sectionList ?? [] {
                for j in i.items ?? [] {
                    
                    if let row = i.items?.firstIndex(where: {$0.unitId == id}) {
                        i.items?[row].bgColor = "yellow"
                    }
                }
            }

JSON模型:

struct AppointmentDetail : Codable {
    
    let projectId : Int?
    let projectName : String?
    let projectNo : String?
    let projectType : String?
    let sectionList : [SectionList]?
    
}

struct SectionList : Codable {
    
    let title : String?
    var sectionId: Int?
    var items : [Item]?
}

struct Item : Codable {
    var bgColor : String?
    var unitId : Int?
    var latitude : Double?
    var longitude : Double?
    }

解决方法

假设您将数组属性更改为var声明且不是可选的,而将unitId(实际上是所有* Id属性)更改为非可选的,则可以使用以下

for (index,appointment) in appointments.enumerated() {
    for (index1,section) in appointment.sectionList.enumerated() {
        if let index2 = section.items.firstIndex(where: {$0.unitId == id}) {
            appointments[index].sectionList[index1].items[index2].bgColor = "yellow"
        }
    }
}
,

因为您的模型定义为Struct,所以要进行修改,必须调用AppDetailsData .....进行更改。例如: 将您的sectionList变量从let更改为var,并以此更改代码

        guard let list = AppDetailData?.sectionList else {
            return
        }
        if let index = list.firstIndex(where: {$0.items?.first?.unitId == 1}) {
            AppDetailData?.sectionList?[index].items?[0].bgColor = "yeallow"
        }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。