在我的应用程序中,选择单元格时在数组中添加了一个对象,重新选择单元格时取消选择并删除了对象。我使用了该代码,但给了我错误。
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'
雨燕等同NSMutableArray的removeObject是:
NSMutableArray
removeObject
var array = ["alpha", "beta", "gamma"] if let index = array.firstIndex(of: "beta") { array.remove(at: index) }
如果对象是唯一的 。完全没有必要强制NSArray使用indexOfObject:
NSArray
indexOfObject:
该API index(of:也可以使用,但这会导致不必要的隐式桥强制转换为NSArray。
index(of:
如果同一对象多次出现,请使用filter。但是,在像数据源数组这样的情况下,将索引与特定对象相关联的情况firstIndex(of是可取的,因为它比快filter。
filter
firstIndex(of
更新:
在斯威夫特4.2+你可以删除一个或多次出现beta用removeAll(where:):
beta
removeAll(where:)
array.removeAll{$0 == "beta"}