Swift: CoreData и общий NSOrderedSet
Я не уверен, что я просто не нашел никакой информации или если это невозможно.
Я просмотрел несколько страниц. Я хочу использовать родовую общую версию NSOrderedSet в Swift.
С помощью Set вы можете сделать это:
Тип Swifts Set привязан к классу Foundations NSSet. Источник: Apple Docs - Наборы
В подклассе NSManagedObject вы можете просто изменить NSSet на Set, и он будет работать. (Протестировано)
@property NSArray<NSDate *> *dates;
@property NSSet<NSString *> *words;
@property NSDictionary<NSURL *, NSData *> *cachedData;
var dates: [NSDate]
var words: Set<String>
var cachedData: [NSURL: NSData]
Источник: Apple Docs - Легкие универсалы
Но я не мог найти ссылки на упорядоченный набор в Swift. Я мог бы использовать NSOrderedSet из Objective-C, но тогда у меня не будет генериков в Swift.
Есть ли возможность определить порядок в наборе в Swift?
Ответы
Ответ 1
Нет, нет упорядоченного набора в Свифт и, честно говоря, вы не должны использовать упорядоченный период. Они очень редко используются.
Но несколько раз, это полезно. Поэтому вам не нужно сортировать свои данные самостоятельно. Особенно, если у вас есть сущность со списком сущностей, они не будут отсортированы, потому что это набор. И тогда вам придется создать массив, чтобы данные были подготовлены в определенном порядке, потому что простой набор не сохраняет свой порядок. Поэтому для основных данных это особенно полезно при использовании NSFetchedResultsController.
Это ленивое дополнение к Core Data, которое никогда не должно было случиться. Это никогда не бывает более полезным или более эффективным, чем написание собственной процедуры сортировки. Написание метода удобства в подклассах для создания упорядоченного массива будет более быстрым и более эффективным, чем использование NSOrderedSet
.
Когда вы используете NSFetchedResultsController
это абсолютно бесполезно, поскольку NSFetchedResultsController
заказывает все для вас.
Ответ 2
Я согласен с ответом Маркуса Зарры, это, как правило, не функция, которую стоит использовать, но хотелось добавить пару вещей. Обычно я рекомендую добавлять свойство для явных значений порядка, которые вы можете сортировать.
Упорядоченные наборы являются гражданами второго сорта в Core Data даже для Apple, они не поддерживались в хранилищах iCloud Core Data (хотя в этой системе были проблемы с этой системой, и я считаю, что она теперь устарела вообще).
В Swift можно было бы написать свой собственный упорядоченный набор с семантикой значений, но на данный момент невозможно включить переключение между заданным и установленным набором Foundation.
Если вы действительно отчаянно нуждались в поддержке, вы можете написать собственный генератор кода для создания аксессуаров для вашего пользовательского упорядоченного типа набора (или просто добавить аксессоров вручную).
В заключение есть способы, которыми вы могли бы это сделать, но это не значит, что вы должны.