Swift检查对象数组是否包含另一个数组的对象

时间:2016-01-19 10:05:23

标签: ios arrays swift2 contains equality

我正在使用两个数组:

var facebookFriends: [FacebookFriend] = []

var friendsToInvite: [FacebookFriend]!

第一个数组包含所有Facebook好友,第二个数组包含在不同ViewController中选择的对象FacebookFriend

两个数组都在ViewController中正确实例化。

-tableView:cellForRowAtIndexPath委托方法中,如果来自facebookFriends数组的Facebook好友包含在friendsToInvite数组中,我想更改单元格视图。

为了实现这一目标,我尝试了以下方法:

if(friendsToInvite.contains(facebookFriends[indexPath.row])) {
    // Code to change the view of the cell
 }

但是我收到以下错误:

  

无法下标'[FacebookFriend]'类型的值。

有没有其他方法可以检查数组中是否包含此对象?

2 个答案:

答案 0 :(得分:1)

您的FacebookFriend课程必须符合Equatable协议才能使contains()方法有效。这个protocol允许比较对象。

让我们使用简化的facebookFriend类:

class facebookFriend {

    let name:String
    let lastName:String

    init(name:String, lastName:String) {
        self.name = name
        self.lastName = lastName
    }

}

您可以非常轻松地符合Equatable协议:

extension facebookFriend: Equatable {}

    func ==(lhs: facebookFriend, rhs: facebookFriend) -> Bool {
        let areEqual = lhs.name == rhs.name &&
        lhs.lastName == rhs.lastName
        return areEqual
    }
}

答案 1 :(得分:-1)

您可以使用

制作过滤器
let friend:FacebookFriend = facebookFriends[indexPath.row]
var filteredArray = friendsToInvite.filter( { (inviteFriend: FacebookFriend) -> Bool in
        return inviteFriend.userID == friend.userID
    });

if(count(filteredFriend) > 0){
  // friend exist
}
else{
  // friend does not exist
}