。包含无法使用自定义对象

时间:2018-08-21 11:44:07

标签: arrays swift

我正在使用以下代码更新阵列。我的要求是新数据不存在,因为我正在使用.contains方法。

当我更改视图控制器并再次出现在同一页面上时,此方法无法正常工作。它返回false,因此我不断得到重复的结果。

这是与自定义对象有关的问题吗?

if let list  =  rooms as? [[String : AnyObject]]
{
    // self.roomList = [Room]()
    for item in list
    {
      let roomStr = json(from: item)
      let roomObj : Room = Room(JSONString: roomStr!)!
      if !self.roomList.contains(roomObj)
      {
        self.roomList.append(roomObj)
      }  
    }
    DispatchQueue.main.async {
      //First sort by name and then sort by default room..
      self.roomList.sort { $0.getRoomName()! < $1.getRoomName()! }
      self.roomList.sort { $0.getDefaultRoom()! && !$1.getDefaultRoom()! }
      self.LoadRoomsTableView.reloadData()
      self.hideActivity()
    }
}

任何解决方法的想法,或者任何有效的方法来快速添加/更新数组中的数据的建议。

1 个答案:

答案 0 :(得分:2)

您必须确保您的Room类/结构实现协议Equatable

示例:

class Room {

    let rooms: Int
    let color: String

    init(rooms: Int, color: String) {
        self.rooms = rooms
        self.color = color
    }

}

extension Room: Equatable {
    func ==(lhs: Room, rhs: Room) -> Bool {
        return lhs.rooms == rhs.rooms &&  lhs.color == rhs.color
    }
}

如果您有struct并且Swift> 4.1+,则不会出现此问题,因为==由Swift提供。感谢Vadian的提醒。