我修改了这个问题,把重点放在最后一个错误上。这是我代码中的最后一个错误:按值移除对象的数组扩展
似乎也和这篇文章有关:
Array extension to remove object by value
但我被困了:x
func cell(cell: FriendSearchTableViewCell, didSelectUnfollowUser user: PFUser) {
if var followingUsers = followingUsers {
ParseHelper.removeFollowRelationshipFromUser(PFUser.currentUser()!, toUser: user)
// update local cache
removeObject(user, fromArray: &followingUsers)
self.followingUsers = followingUsers
}
//对于“removeObject”,会引发一个错误:
使用未解析的标识符“removeObject”
函数通过一个
Foundation
文件调用框架Array+RemoveObject.swift
,该文件声明:import Foundation
// Thanks to Martin R: https://stackoverflow.com/questions/24938948/array-extension-to-remove-object-by-value
extension Array where Element : Equatable {
// Remove first collection element that is equal to the given `object`:
mutating func removeObject(object : Generator.Element) {
if let index = self.indexOf(object) {
self.removeAtIndex(index)
}
}
}
我不确定我的工作区是否正确理解他需要参考这个swift文件来查找已标识
removeObject
的详细信息。 最佳答案
PFUser
不符合Equatable
协议,因此您的扩展不适用。但是PFUser
是通过它的用户名来识别的。您可以使用filter
解决问题,无需扩展:
func cell(cell: FriendSearchTableViewCell, didSelectUnfollowUser user: PFUser) {
if var followers = followingUsers {
ParseHelper.removeFollowRelationshipFromUser(PFUser.currentUser()!, toUser: user)
// update local cache
followers = followers.filter { $0.username != user.username }
self.followingUsers = followers
}
}