我正在使用以下代码更新阵列。我的要求是新数据不存在,因为我正在使用.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()
}
}
任何解决方法的想法,或者任何有效的方法来快速添加/更新数组中的数据的建议。
答案 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的提醒。