2017-02-22 33 views
1

Я пытаюсь добавить JSON данные, которые я получил от моего сервера на массив объекта и хочу, чтобы удалить дубликаты, если естьSwift удаления дубликатов из массива объекта

это мой собственный класс

class datastruct { 

    var id: Int? 
    var name: String? 

    init(add: NSDictionary) { 
     id = add["id"] as? Int 
     name = add["name"] as? String 
    } 
} 

и это мой код, который я использую, чтобы добавить JSON в мой массив

var data:Array<datastruct> = Array <datastruct>() 
    Alamofire.request(url) 
       .responseJSON{ response in 
        switch response.result { 
        case .success(let JSON): 
         if let list = JSON as? NSArray { 
          for i in 0 ..< list.count { 
           if let res = list[i] as? NSDictionary { 
            self.data.append(datastruct(add: res)) 
           } 
          } 
          self.refresh() 
         } 

        case .failure(let error): 

        } 

       } 

проблема, я уже несколько искать решение, чтобы удалить дубликаты массив в StackOverflow

Remove duplicate objects in an array

Remove duplicates from array of objects

Removing Duplicates From Array of Custom Objects Swift

но когда я пытаюсь использовать Hashable я не знаю, куда поместить Set в мой код, потому что это NSDictionary

Пожалуйста, помогите мне как удалить дубликат массива или дать мне подсказку

+0

соответствует вашему классу 'Datastruct' с помощью протокола« Equatable ». посмотрите SO для получения дополнительной информации. –

ответ

4

Я думаю, что это простой способ решить эту проблему. Прежде всего ваш datastruct класс должен быть расширен NSObject. Затем добавьте isEqual(_ object: Any?) в ваш datastruct. подобным образом.

class datastruct : NSObject { 

    var id: Int? 
    var name: String? 

    init(add: NSDictionary) { 
     id = add["id"] as? Int 
     name = add["name"] as? String 
    } 

    override func isEqual(_ object: Any?) -> Bool { 
     let obj = object as! datastruct 
     if self.id == obj.id { 
      return true 
     } else { 
      return false 
     } 
    } 
} 

Теперь вы можете проверить дублирование.

if let res = list[i] as? NSDictionary { 
    let dataStructObj = datastruct(add: res) 
    if !data.contains(dataStructObj) { 
     self.data.append(dataStructObj) 
    } 

} 

Я надеюсь, что это вам поможет.

 Смежные вопросы

  • Нет связанных вопросов^_^