我有这样的代码
let index = tableView.selectedRowIndexes.map { Int($0) }
arrDomains.remove(at: index)
但是出现错误:
无法将类型“ [Int]”的值转换为预期的参数类型“ Int”
如何将[Int]转换为int?
Swift 4,macOS
答案 0 :(得分:5)
索引 es 是复数,表示有多个值
selectedRowIndexes
返回一个IndexSet
对象。您可以使用forEach
,但必须反转索引,否则会出现著名的迭代范围外变异错误。
let indexes = tableView.selectedRowIndexes
indexes.reversed().forEach{ arrDomains.remove(at: $0) }
将indexSet
映射到[Int]
是多余的。
Here是一种优化的remove(at indexes: IndexSet)
方法。
答案 1 :(得分:1)
index
是一个整数数组。但是您需要将Int
传递给remove
方法。
如果要删除选定行索引的所有对象,则写:
let indexes = tableView.selectedRowIndexes.map { Int($0) }
indexes.reversed().forEach { arrDomains.remove(at: $0) }
如果要删除某个索引处的对象,则可以写:
guard let index = tableView.selectedRowIndexes.map { Int($0) }.first(where: { /*.your condition here */ }) else { return }
arrDomains.remove(at: $0)