Swift从对象数组中删除重复项

Dir*_*rus 1 json nsdictionary nsarray ios swift3

我尝试将从服务器获取的json数据附加到对象数组,并且如果有任何重复,则要删除任何重复数据

这是我的自定义类

class datastruct {

    var id: Int?
    var name: String?

    init(add: NSDictionary) {
        id = add["id"] as? Int
        name = add["name"] as? String
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我用来将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):

                    }

                }
Run Code Online (Sandbox Code Playgroud)

问题是我已经搜索了几个解决方案来删除stackoverflow中的任何重复数组

删除数组中的重复对象

从对象数组中删除重复项

从Swift自定义对象数组中删除重复项

但是当我尝试使用时,Hashable我不知道在哪里放入Set我的代码,因为它是NSDictionary

请帮我如何删除数组的副本或给我一些提示

jig*_*iya 5

我认为这是解决这个问题的更简单方法.首先,你的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
        }
    }   
}
Run Code Online (Sandbox Code Playgroud)

现在您可以检查重复.

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

}
Run Code Online (Sandbox Code Playgroud)

我希望它会对你有所帮助.