匹配并删除Swift 3中的数组项

时间:2017-04-18 08:11:31

标签: ios arrays swift

我有NSMutableDictionary我希望删除并在code值等于deletecode的内部刷新我的tableview。

  

我该怎么办? ,我的代码如下。

var myCells = [NSMutableDictionary]()
myCells = [["isExpanded" : false,
            "isVisible" : true,
            "additionalRows" : 7,
            "code" : "Flex1"
           ],
           [ "isExpanded" : false,
             "isVisible" : true,
             "additionalRows" : 7,
             "code" : "Flex3"
           ],
           [ "isExpanded" : false,
             "isVisible" : true,
             "additionalRows" : 7,
             "code" : "Flex4"
           ]]

 let deletecode = "Flex1"

 if let indexOfA = myCells.flatMap({$0["\(deletecode))"]}).last {
     self.tableView.beginUpdates()
     self.myCells.remove(at: indexOfA as! Int)
     self.tableView.endUpdates()
     self.tableView.reloadData()
 }

我的代码第2部分

myCells = myCells.filter { (element) -> Bool in
        if let code = element["additionalRows"] as? String {
            if code != "7" {

            }else {

                let fetchRequestf                = NSFetchRequest<NSFetchRequestResult>(entityName:"Match")
                let predicatek = NSPredicate (format:"code = %@",(element["code"] as? String)!)
                fetchRequestf.predicate = predicatek

                do {
                    let getSett = try context.fetch(fetchRequestf) as! [Match]

                    if (getSett.count > 0) {

                        if (getSett[0].show == false){

                            let deletecode = getSett[0].code

                            self.tableView.beginUpdates()
                            myCells = myCells.filter { (element) -> Bool in
                                if let code = element["code"] as? String {
                                    return code != deletecode
                                }
                                return true
                            }

                            self.tableView.endUpdates()
                            self.tableView.reloadData()
                        }
                    }


                } catch let error as NSError {
                    print(error)
                }
            }
        }

        return true

    }

2 个答案:

答案 0 :(得分:1)

你可以简单地filter你的阵列:

myCells = myCells.filter { (element) -> Bool in
    if let code = element["code"] as? String {
        return code != deletecode
    }
    return true
}
self.tableView.reloadData()

答案 1 :(得分:0)

第一行是不必要的 - 你可以改为写

var myCells = [items]

当您将数组创建为 var 时,它将是可变的。

取代 flatMap ,使用索引(of :)

您的代码可能如下所示:

myCells.index{$0["code"] == "Flex4"}