Добавить / обновить массив пользовательских словарей в Swift 4 - PullRequest
0 голосов
/ 25 августа 2018

У меня есть массив словаря с пользовательским объектом в Swift. Сейчас я сравниваю объект для добавления и обновления. Логика проста: добавлять данные, если они не существуют, и обновлять, если в словаре есть изменения.

Пользовательский тип объекта:

 @objc public class User: NSObject , Mappable  

из getUserID я могу получить идентификатор пользователя

Приведенный ниже код выполняется в цикле for, откуда я передаю объект User.

 var peopleList = [User]()

if self.peopleList.count > 0 {
    if self.peopleList.contains(where: {$0.getUserID() == users.getUserID()})
    {
        // check for any update in dist
        if let index = self.peopleList.index(of: users)
        {
            if users.isEqual(self.peopleList[index])
            {
                print("equal no updates")
            }
            else 
            {
                print("need to updates objects..")
            }
        }        
        //already exist room
    }
    else
    {
        self.peopleList.append(users)
    }
}

Я знаю, что это может быть связано с равноправным

поэтому я использую ниже fuction

func isEqual<T: Equatable>(type: T.Type, a: Any, b: Any) -> Bool? {
    guard let a = a as? T, let b = b as? T else { return nil }
    return a == b
}

Но я получаю index = nil. Есть ли идея или предложение, чтобы решить это. Если есть какой-то другой способ сделать это эффективно, то они очень приветствуются.

1 Ответ

0 голосов
/ 25 августа 2018

Я думаю, что эта упрощенная версия должна работать

if self.peopleList.isEmpty, let user = self.peopleList.first(where: { $0.getUserID() == users.getUserID() }) {
    if user == users {
        // is equal
    } else {
        // do update
    }
} else {
    self.peopleList.append(users)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...