一尘不染

在Swift 3中从数组中删除对象

swift

在我的应用程序中,选择单元格时在数组中添加了一个对象,重新选择单元格时取消选择并删除了对象。我使用了该代码,但给了我错误。

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])
    }
}

它给了我2像这样的错误:

C-style for statement has been removed in Swift 3
Value of type '[Any]' has no member 'removeObject'

阅读 509

收藏
2020-07-07

共1个答案

一尘不染

雨燕等同NSMutableArrayremoveObject是:

var array = ["alpha", "beta", "gamma"]

if let index = array.firstIndex(of: "beta") {
    array.remove(at: index)
}

如果对象是唯一的 。完全没有必要强制NSArray使用indexOfObject:

该API index(of:也可以使用,但这会导致不必要的隐式桥强制转换为NSArray

如果同一对象多次出现,请使用filter。但是,在像数据源数组这样的情况下,将索引与特定对象相关联的情况firstIndex(of是可取的,因为它比快filter

更新:

在斯威夫特4.2+你可以删除一个或多次出现betaremoveAll(where:)

array.removeAll{$0 == "beta"}
2020-07-07