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

时间:2015-07-24 13:00:21

标签: ios swift nsmutablearray

我有一系列用户,我试图将其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")
})

4 个答案:

答案 0 :(得分:1)

你不能简单地通过投射将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")
})

答案 1 :(得分:1)

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

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

mutableCopy()以及NSMutableArray的新实例可以使用。

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:-1)

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