在swift中,如何从tableview中删除对象?

在swift中,如何从tableview中删除对象?,swift,dictionary,object,sections,Swift,Dictionary,Object,Sections,我有一个数据使用这本字典命名:listDuJour从类Donnees class AlimentObject { var id = UUID().uuidString var nomAliment = "Nouvel aliment" var poids : Float = 100 var calories : Float = 0 var proteines : Float = 0 var lipides : Float = 0

我有一个数据使用这本字典命名:listDuJour从类Donnees

class AlimentObject {
    var id = UUID().uuidString
    var nomAliment = "Nouvel aliment"
    var poids : Float = 100
    var calories : Float = 0
    var proteines : Float = 0
    var lipides : Float = 0
    var glucides : Float = 0
    var aRetinol : Float = 0
    var aBetacarotene : Float = 0
    var vitamineC : Float = 0
    var vitamineB1 : Float = 0
    var calcium : Float = 0
    var omega3 : Float = 0
    var comments : String = ""
    var premierBooleen: Bool
    var optimize: Bool
    

    
    init(nomAliment: String, poids: Float, calories: Float, proteines: Float, lipides: Float, glucides: Float, aRetinol: Float, aBetacarotene: Float, vitamineC: Float, vitamineB1: Float, calcium: Float, omega3: Float, comments:String, premierBooleen: Bool, optimize: Bool) {
        
        self.nomAliment = nomAliment
        self.poids = poids
        self.calories = calories
        self.proteines = proteines
        self.lipides = lipides
        self.glucides = glucides
        self.aRetinol = aRetinol
        self.aBetacarotene = aBetacarotene
        self.vitamineC = vitamineC
        self.vitamineB1 = vitamineB1
        self.calcium = calcium
        self.omega3 = omega3
        self.comments = comments
        self.premierBooleen = false
        self.optimize = false
    }
    
    convenience init() {
        self.init(nomAliment: "Nouvel aliment", poids: 100, calories: 0, proteines: 0, lipides: 0, glucides: 0, aRetinol: 0, aBetacarotene: 0, vitamineC: 0, vitamineB1: 0, calcium: 0, omega3: 0, comments: "", premierBooleen: false, optimize: false)
    }
}

let begin01 = "11 09 2020"
let dateFormatter01 = DateFormatter()
dateFormatter01.dateFormat = "dd MM yyyy"
let date01 = dateFormatter01.date(from: begin01)!

let begin02 = "12 09 2020"
let dateFormatter02 = DateFormatter()
dateFormatter02.dateFormat = "dd MM yyyy"
let date02 = dateFormatter02.date(from: begin02)!

let begin03 = "15 09 2020"
let dateFormatter03 = DateFormatter()
dateFormatter03.dateFormat = "dd MM yyyy"
let date03 = dateFormatter03.date(from: begin03)!


func dateSimplificator(with date: Date) -> Date {
    return Calendar.current.startOfDay(for: date)
}

class Donnees {
        
        static var AlimentListWithSections = [[AlimentObject]]()
        
        static let list1 = [
            AlimentObject(nomAliment: "Blanc de poulet", poids: 100, calories: 108, proteines: 24, lipides: 1, glucides: 0, aRetinol: 8, aBetacarotene: 0, vitamineC: 0, vitamineB1: 0.08, calcium: 8, omega3: 0.03, comments: "sdsdsdsdsd sdsddsdsd", premierBooleen: false, optimize: false),
            AlimentObject(nomAliment: "Avocat", poids: 100, calories: 147, proteines: 1.76, lipides: 13.80, glucides: 1.57, aRetinol: 0, aBetacarotene: 55, vitamineC: 5.49, vitamineB1: 0.05, calcium: 11.2, omega3: 0.08, comments: "aaaaaaaaa sdsddsdsd", premierBooleen: false, optimize: false),
            AlimentObject(nomAliment: "Amandes", poids: 100, calories: 634, proteines: 21, lipides: 53, glucides: 8, aRetinol: 8, aBetacarotene: 1, vitamineC: 0.8, vitamineB1: 0.18, calcium: 248, omega3: 0.06, comments: "fffffff sdsddsdsd", premierBooleen: false, optimize: false)
            ]
        
        static let list2 = [
            AlimentObject(nomAliment: "Poivron Jaune", poids: 80, calories: 29.2, proteines: 1, lipides: 5.42, glucides: 0.21, aRetinol: 0, aBetacarotene: 120, vitamineC: 184, vitamineB1: 0.03, calcium: 11, omega3: 0.02, comments: "lllllllssss", premierBooleen: false, optimize: false),
            AlimentObject(nomAliment: "Saumon cru", poids: 100, calories: 192, proteines: 20.5, lipides: 12.2, glucides: 0, aRetinol: 8, aBetacarotene: 0, vitamineC: 1.6, vitamineB1: 0.21, calcium: 8, omega3: 1.79, comments: "eeeeeeee", premierBooleen: false, optimize: false)
            ]
        
        static let list3 : [AlimentObject] = [
            AlimentObject(nomAliment: "Avocat", poids: 100, calories: 147, proteines: 1.76, lipides: 13.80, glucides: 1.57, aRetinol: 0, aBetacarotene: 55, vitamineC: 5.49, vitamineB1: 0.05, calcium: 11.2, omega3: 0.08, comments: "aaaaaaaaa sdsddsdsd", premierBooleen: false, optimize: false),
            ]
        
        static let list4 : [AlimentObject] = [
            AlimentObject(nomAliment: "Amandes", poids: 100, calories: 108, proteines: 21, lipides: 53, glucides: 8, aRetinol: 8, aBetacarotene: 1, vitamineC: 0.8, vitamineB1: 0.18, calcium: 248, omega3: 0.06, comments: "fffffff sdsddsdsd", premierBooleen: false, optimize: false)
            ]
        
        static let list5 : [AlimentObject] = []
    
        static let listVide : [AlimentObject] = []

        static let listDuJour = [list1, list2, list3, list4, list5]
    static let nomsDesRepas: [String] = ["Petit Déjeuner", "Collation 11h", "Déjeuner", "Collation 16h", "Diner"]

    static func removeInstance(menuDuJour: [[AlimentObject]], attr1: String, attr2: Float) -> [[AlimentObject]] {
        let ListDuJourFiltree = menuDuJour.map {
            $0.filter { !($0.nomAliment == attr1 && $0.poids == attr2) }
        }
        return ListDuJourFiltree
    }
}

如何从列表中删除第二部分中名为“Poivron Jaune”且poids=“80”的Liment对象? 我有两个参数来搜索我的AlimentObject:名称和POID。
解决方案不应删除数组中的空部分。

要删除
示例的实例(我的示例结构的名称),可以执行以下操作

struct Sample {
    var attr1: String
    var attr2: String
}

let list1: [Sample] = [
    .init(attr1: "alasdfj", attr2: "asd"),
    .init(attr1: "qwer", attr2: "upoipp"),
    .init(attr1: "yxcv", attr2: "gfhj")
]
let list2: [Sample] = [
    .init(attr1: "Poviron Jaune", attr2: "80")
]

let list = [list1, list2]

let resultList = list.map {
    $0.filter { !($0.attr1 == "Poviron Jaune" && $0.attr2 == "80") }
}

如果要删除
resultList
中的空数组,也可以将最后一部分更改为:

let resultList = list.map {
    $0.filter { !($0.attr1 == "Poviron Jaune" && $0.attr2 == "80") }
}.filter { !($0.isEmpty) }
(如果子阵列中的所有实例都已删除,则会出现空阵列)

因此,您应该能够执行以下操作,以除去
listDuJour
中所需的元素:

static func removeInstance(attr1: String, attr2: String) {
    listDuJour = listDuJour.map {
        $0.filter { !($0.nomAliment == attr1 && $0.poids == attr2) }
    }.filter { !($0.isEmpty) }
}
或者,如果要保留空数组(空节):


请注意,删除元素后必须调用
tableView.reloadData()

要删除
Sample
(示例结构的名称)的实例,可以执行以下操作

struct Sample {
    var attr1: String
    var attr2: String
}

let list1: [Sample] = [
    .init(attr1: "alasdfj", attr2: "asd"),
    .init(attr1: "qwer", attr2: "upoipp"),
    .init(attr1: "yxcv", attr2: "gfhj")
]
let list2: [Sample] = [
    .init(attr1: "Poviron Jaune", attr2: "80")
]

let list = [list1, list2]

let resultList = list.map {
    $0.filter { !($0.attr1 == "Poviron Jaune" && $0.attr2 == "80") }
}

如果要删除
resultList
中的空数组,也可以将最后一部分更改为:

let resultList = list.map {
    $0.filter { !($0.attr1 == "Poviron Jaune" && $0.attr2 == "80") }
}.filter { !($0.isEmpty) }
(如果子阵列中的所有实例都已删除,则会出现空阵列)

因此,您应该能够执行以下操作,以除去
listDuJour
中所需的元素:

static func removeInstance(attr1: String, attr2: String) {
    listDuJour = listDuJour.map {
        $0.filter { !($0.nomAliment == attr1 && $0.poids == attr2) }
    }.filter { !($0.isEmpty) }
}
或者,如果要保留空数组(空节):


请注意,删除元素后必须调用
tableView.reloadData()

谢谢您的回答,该对象已被删除,但它不是唯一的对象。当我应用您的解决方案时,数组listDuJour中的所有空部分都会被删除。这对于我的tableView是不可能的。你在我的字典中测试过吗?
AlimentListWithSections
不是字典,而是2d数组。不,我没有测试它,因为我没有您的模型类/结构(
AlimentObject
)。但我认为它应该起作用……不幸的是,它不起作用。我已经添加了所有类,如果你想用所有必要的代码测试你的解决方案,这段代码对我来说很好:
let result=Donnees.removeInstance(menuDuJour:Donnees.listDuJour,attr1:“Poivron Jaune”,attr2:80)
。因此,
result
不包括具有nomAliment的对象:“Poivron Jaune”和POID:80谢谢您的回答,该对象已被删除,但它不是唯一的对象。当我应用您的解决方案时,数组listDuJour中的所有空部分都会被删除。这对于我的tableView是不可能的。你在我的字典中测试过吗?
AlimentListWithSections
不是字典,而是2d数组。不,我没有测试它,因为我没有您的模型类/结构(
AlimentObject
)。但我认为它应该起作用……不幸的是,它不起作用。我已经添加了所有类,如果你想用所有必要的代码测试你的解决方案,这段代码对我来说很好:
let result=Donnees.removeInstance(menuDuJour:Donnees.listDuJour,attr1:“Poivron Jaune”,attr2:80)
。因此,
result
不包括无限制的对象:“Poivron Jaune”和poid:80