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