Это так безумно. Я сравниваю два массива пользовательского типа, но он говорит, что это не равно, но на самом деле это так, потому что я напечатал все объекты в нем и проверил их с помощью https://www.diffchecker.com
, если они разные, а они нет! Я использую Swift 4.2
func deleteFavorite(_ favorite: Favorite) {
var oldFavorites = getFavoriteSurahs()
oldFavorites.forEach {
$0.reciter.surahs.forEach {
print($0.name)
print($0.number)
}
print()
favorite.reciter.surahs.forEach {
print($0.name)
print($0.number)
}
print(NSArray(array:
$0.reciter.surahs).isEqual(favorite.reciter.surahs))
// It prints false BUT IT SHOULD PRINT TRUE, BECAUSE THEY'RE ACTUALLY EQUAL
}
}
Вот мой класс суры:
class Surah: NSObject, NSCoding {
private(set) public var name: String
private(set) public var number: Int
init(number: Int, name: String) {
self.number = number
self.name = name
}
func encode(with aCoder: NSCoder) {
aCoder.encode(self.name, forKey: "name")
aCoder.encode(self.number, forKey: "number")
}
required init?(coder aDecoder: NSCoder) {
self.name = aDecoder.decodeObject(forKey: "name") as! String
self.number = aDecoder.decodeInteger(forKey: "number")
}
}
А это моя getFavoriteSurahs()
функция:
func getFavoriteSurahs() -> [Favorite] {
if let favoritesData = self.object(forKey: UD_FAVORITES) as? Data {
do {
let favorites = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(favoritesData) as! [Favorite]
return favorites
} catch {
debugPrint(error)
return [Favorite]()
}
} else {
print("EMPTY Favorites")
return [Favorite]()
}
}
UPDATE
Это так, свалка:
print($0.surah.number == favorite.surah.number)
print($0.surah.name == favorite.surah.name)
// Prints true
print($0.surah == favorite.surah)
// Prints false
ОБНОВЛЕНИЕ 2
if $0.reciter.name == favorite.reciter.name && $0.reciter.image == favorite.reciter.image && $0.reciter.documentID == favorite.reciter.documentID &&
$0.reciter.surahs.count == favorite.reciter.surahs.count &&
$0.surah.number == favorite.surah.number &&
$0.surah.name == favorite.surah.name {
print("OMG FINALLY")
} else {
print("NOO NOO NOO")
}
// ПЕЧАТЬ ОМГ НАКОНЕЧНО После проверки каждого элемента. Это нормально ??