Kam*_*iya 63 arrays ios swift swift3
在我的应用程序中,我在选择单元格时在数组中添加了一个对象,并在重新选择单元格时取消选择并删除对象.我使用了那段代码但是给了我错误.
extension Array {
func indexOfObject(object : AnyObject) -> NSInteger {
return (self as NSArray).indexOfObject(object)
}
mutating func removeObject(object : AnyObject) {
for var index = self.indexOfObject(object); index != NSNotFound; index = self.indexOfObject(object) {
self.removeAtIndex(index)
}
}
}
class MyViewController: UITableViewController {
var arrContacts: [Any] = []
var contacts: [Any] = []
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
arrContacts.removeObject(contacts[indexPath.row])
}
}
Run Code Online (Sandbox Code Playgroud)
它给了我2个错误:
C-style for statement has been removed in Swift 3
Value of type '[Any]' has no member 'removeObject'
Run Code Online (Sandbox Code Playgroud)
vad*_*ian 123
迅(3)等效于NSMutableArray的removeObject是:
var array = ["alpha", "beta", "gamma"]
if let index = array.firstIndex(of: "beta") {
array.remove(at: index)
}
Run Code Online (Sandbox Code Playgroud)
如果对象是唯一的.根本不需要投射NSArray和使用indexOfObject:
如果有多次出现相同的对象使用index(of:.但是,在数据源数组中,索引与特定对象关联NSArray的情况更可取,因为它比它更快filter.
更新:
在斯威夫特4.2+你可以删除一个或多次出现firstIndex(of用filter:
array.removeAll{$0 == "beta"}
Run Code Online (Sandbox Code Playgroud)
nyx*_*xee 65
var a = ["one", "two", "three", "four", "five"]
// Remove/filter item with value 'three'
a = a.filter { $0 != "three" }
Run Code Online (Sandbox Code Playgroud)
Mar*_*sel 23
对于Swift 3,您可以使用index(where :)并包含一个闭包,用于比较数组中的对象($ 0)与您要查找的内容.
var array = ["alpha", "beta", "gamma"]
if let index = array.index(where: {$0 == "beta"}) {
array.remove(at: index)
}
Run Code Online (Sandbox Code Playgroud)
Luc*_*nzo 16
另一个不错的有用解决方案是创建这种扩展:
extension Array where Element: Equatable {
@discardableResult mutating func remove(object: Element) -> Bool {
if let index = index(of: object) {
self.remove(at: index)
return true
}
return false
}
@discardableResult mutating func remove(where predicate: (Array.Iterator.Element) -> Bool) -> Bool {
if let index = self.index(where: { (element) -> Bool in
return predicate(element)
}) {
self.remove(at: index)
return true
}
return false
}
}
Run Code Online (Sandbox Code Playgroud)
这样,如果您的数组包含自定义对象:
let obj1 = MyObject(id: 1)
let obj2 = MyObject(id: 2)
var array: [MyObject] = [obj1, obj2]
array.remove(where: { (obj) -> Bool in
return obj.id == 1
})
// OR
array.remove(object: obj2)
Run Code Online (Sandbox Code Playgroud)
for var index = self.indexOfObject(object); index != NSNotFound; index = self.indexOfObject(object) 是C风格的循环,已被删除
将代码更改为类似于删除所有类似对象(如果已循环):
let indexes = arrContacts.enumerated().filter { $0.element == contacts[indexPath.row] }.map{ $0.offset }
for index in indexes.reversed() {
arrContacts.remove(at: index)
}
Run Code Online (Sandbox Code Playgroud)雨燕4
var students = ["Kofi", "Abena", "Peter", "Kweku", "Akosua"]
if let index = students.firstIndex(where: { $0.hasPrefix("A") }) {
students.remove(at: index)
}
Run Code Online (Sandbox Code Playgroud)
在Swift 3中,使用以下命令Extension:
extension Array where Element: Equatable{
mutating func remove (element: Element) {
if let i = self.index(of: element) {
self.remove(at: i)
}
}
}
Run Code Online (Sandbox Code Playgroud)
例:
var array = ["alpha", "beta", "gamma"]
array.remove(element: "beta")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
74962 次 |
| 最近记录: |