如何将数组转换为 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
突变
我有一组用户,我试图将其转换为 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
突变