基于Swift 3中的didSelectRowAtIndexpath在数组中添加或删除对象

时间:2017-08-06 05:32:21

标签: ios arrays swift uitableview swift3

我正在使用expandable tableView,我需要根据didSelectRowAtIndexpath添加或删除对象。我能够将所选项添加到数组中,但问题是当我尝试从数组中删除选择时。

这是我得到的错误:

  

无法使用类型(of:any)

的参数列表调用索引

这是我的代码:

func expandableTableView(_ expandableTableView: LUExpandableTableView, didSelectRowAt indexPath: IndexPath) {
    let selectedService = arrData[indexPath.section].Children?[indexPath.row].EnglishName ?? ""
    let inPrice = arrData[indexPath.section].Children?[indexPath.row].InPrice ?? 0

    print("service and price : \(selectedService) \(inPrice)")

    let selectedItem = (" \(selectedService) \(inPrice)")
    let cell: UITableViewCell? = expandableTableView.cellForRow(at: indexPath)

    if cell?.accessoryType == UITableViewCellAccessoryType.none
    {
        cell?.accessoryType = UITableViewCellAccessoryType.checkmark
        selectionArr.append(selectedItem)
    }
    else
    {
        cell?.accessoryType = UITableViewCellAccessoryType.none
        selectionArr.remove(at: selectionArr.index(of: selectedItem)!)
    }

    print(selectionArr)
}

3 个答案:

答案 0 :(得分:1)

@AnhPham

嘿,尝试修改你的代码并且它工作得很好请通过以下方法添加数组中的项目并从tableview中删除相同的doselect和diddeselect方法。

 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    let categoryTableCell = self.categoriesTableview.cellForRow(at: indexPath) as! CategoriesTableCell

    self.tempCategories.append(self.categories[indexPath.row])

    print("tempArray select:\(self.tempCategories)")

}

func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {

    let categoryTableCell = self.categoriesTableview.cellForRow(at: indexPath) as! CategoriesTableCell

    self.tempCategories.remove(at: self.tempCategories.index(of:self.categories[indexPath.row])!)

    print("tempArray deselect:\(self.tempCategories)")

}

答案 1 :(得分:0)

selectionArr.remove(at:selectionArr.index(of:selectedItem)!)

selectedItem不是Int。您应该收到错误:

"无法转换类型'字符串'的值预期参数类型' Int'"

也许你只是在搜索这个:

selectionArr.remove(at: indexPath.row)

答案 2 :(得分:0)

使用indexPath.row而不是selectedItem selectionArr.remove(at:selectionArr.index(of:indexPath.row)!)