У меня есть пользовательские объекты (Сканирование) в массиве. Я хотел бы удалить конкретный объект, он не работает. Вот мой код:Удалить пользовательский объект в массиве
class Scan : NSObject, NSCoding {
let code : String
let title : String
let scanDate : NSDate
init(code: String, title: String, scanDate: NSDate) {
self.code = code
self.title = title
self.scanDate = scanDate
}
// MARK: NSCoding
required convenience init?(coder decoder: NSCoder) {
guard let code = decoder.decodeObjectForKey("code") as? String,
let title = decoder.decodeObjectForKey("title") as? String,
let scanDate = decoder.decodeObjectForKey("scanDate") as? NSDate
else { return nil }
self.init(code: code, title: title, scanDate: scanDate)
}
func encodeWithCoder(coder: NSCoder) {
coder.encodeObject(self.title, forKey: "title")
coder.encodeObject(self.code, forKey: "code")
coder.encodeObject(self.scanDate, forKey: "scanDate")
}
}
func == (lhs: Scan, rhs: Scan) -> Bool {
return lhs.code == rhs.code
}
А в другой класс:
func saveScan(scan: Scan){
var allScans = scans()
allScans.append(scan)
NSKeyedArchiver.archiveRootObject(allScans, toFile: filePath)
}
func deleteScan(scan: Scan) {
var archivedScans = scans()
archivedScans.removeObject(scan)
NSKeyedArchiver.archiveRootObject(archivedScans, toFile: filePath)
}
func scans() -> [Scan] {
let scans = NSKeyedUnarchiver.unarchiveObjectWithFile(filePath) as? [Scan] ?? [Scan]()
return scans
}
расширение массива:
extension Array where Element : Equatable {
mutating func removeObject(object : Generator.Element) {
if let index = self.indexOf(object) {
self.removeAtIndex(index)
}
}
}
archivedScans.removeObject(scan)
не работает (archivedScans имеет те же элементы до и после removeObject). Вы видите, почему удаление не работает?
Что? "Не работает" Вы видите ошибку? – JAL
Массив имеет те же элементы до и после removeObject() – samir
Что произойдет, если вы измените 'Generator.Element' на просто' Element' в расширении Array? Кроме того, уверены ли вы, что 'scan' находится в вашем массиве, прежде чем пытаться его удалить? – JAL