Как вы сравниваете 2 операнда типа Date?отсортировать массив в Swift? - PullRequest
0 голосов
/ 10 мая 2019

Для того, чтобы отсортировать массив пользовательской структуры, которая имеет bools, целые числа и даты. Я успешно использовал приведенный ниже синтаксис для логического значения, и он работает для случаев «невеста» и «жених». Когда я попытался добавить сортировку для двух переменных Date, я получил ошибку об ошибке:

"Двоичный оператор '>' нельзя применить к двум 'Date?' операнды "

У меня сложилось впечатление, что значения Date можно сравнивать аналогичным образом с нормальными > < == критериями, но я предполагаю, что получаю ошибку, потому что значения не развернуты? Если это правильно, я не думаю, что могу сделать, если позволить повернуть Дата? в развернутую дату, поэтому я не уверен, как я могу сравнить эти значения.

    var sortedImages = [submitted_image]()
    switch sortOption {
    case .brideInPic:
        print("bride")
        sortedImages = Images.sorted(by: {$0.brideInPic && !$1.brideInPic})
        print("sortedImages: \(sortedImages.count), Images: \(Images.count)")
    case .groomInPic:
        print("groom")
        sortedImages = Images.sorted(by: {$0.groomInPic && !$1.groomInPic})
        print("sortedImages: \(sortedImages.count), Images: \(Images.count)")
    case .create_dt:
        print("create")
        sortedImages = Images.sorted(by: {$0.create_dt > $1.create_dt})
    }

1 Ответ

6 голосов
/ 10 мая 2019

Дополнительные параметры нельзя сравнивать напрямую (сравнить SE-0121 - Удалить дополнительные операторы сравнения ). Но вы можете использовать оператор nil-coalescing ??, чтобы указать дату по умолчанию для записей без даты создания:

Images.sorted(by: {$0.create_dt ?? .distantPast > $1.create_dt ?? .distantPast })

С .distantPast записи без даты создания сортируются в конец списка. С .distantFuture они будут отсортированы в начале списка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...