如何将数组转换为 NSMutableArray 以便能够使用 removeObjectAtIndex

How to cast an array as NSMutableArray to be able to use removeObjectAtIndex

我有一组用户,我试图将其转换为 NSMutableArray 以便能够使用 removeObjectAtIndex,但它不起作用。 如果我尝试投射它,我会得到错误 Cast from '[ModelUser]?' to unrelated type 'NSMutableArray' always fails,如果我不这样做,我会得到 '[ModelUser]' does not have a member named 'removeObjectAtIndex'

那么我怎样才能在这段代码中从我的数组中删除一个对象呢?

query.friend(friendId, command: command, completion: { (result:Bool) -> () in
if result {
   self.tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
   if let friendR = self.friendRequests as? NSMutableArray{
        friendR.removeObjectAtIndex(indexPath.row)
   }
   println("Friendship deleted")
})

您应该从一开始就将 self.friendRequests 初始化为 NSMutableArray

你不能简单地将 NSArray 转换为 NSMutableArray - 它们是不同的 类。要从 NSArray 中获取可变数组,您可以调用 NSArray 上的 mutableCopy 方法。

但是,在你的例子中,数组是一个 Swift 数组,所以它已经是可变的。

您需要使用 removeAtIndex 而不是 removeObjectAtIndex 从 Swift 数组中删除对象 -

query.friend(friendId, command: command, completion: { (result:Bool) -> () in
if result {
   self.tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
   if self.friendRequests != nil {
        self.friendRequests!.removeAtIndex(indexPath.row)
   }
   println("Friendship deleted")
})

实际上你只是在进行类型转换。您需要使 friendR 可变才能删除和添加任何对象。

if let friendR = self.friendRequests.mutableCopy() as? NSMutableArray{
    friendR.removeObjectAtIndex(indexPath.row)
}

mutableCopy()NSMutableArray 的新实例可以工作。

您应该使用以下代码直接将 NSMutableArray 转换为 [YourType]

if var friendR = self.friendRequests as? AnyObject as? [ModelUser] {
    // your swift array handling code here
}

我使用了 var 关键字来启用未来的 friendR 突变