Swift: CoreData и универсальный NSOrderedSet

Я не уверен, что я просто не нашел никакой информации или это невозможно.

Я просмотрел несколько страниц. Я хочу использовать generic универсальную версию NSOrderedSet в Swift.

С помощью набора вы можете сделать следующее:

тип набора Swift соединяется с классом Nsset Foundation. Источник: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?

2 ответов


нет, нет упорядоченного набора в Swift и, честно говоря, вы не должны использовать упорядоченный период набора. Они очень редко используются.

но иногда это полезно. Таким образом, вам не нужно сортировать данные самостоятельно. Особенно когда у вас есть предприятие с список лиц они не отсортированы, потому что это набор. И тогда вам придется создать массив, чтобы данные были подготовлены в определенном порядке, потому что простой набор не сохраняет свой порядок. Так, для сердечника данными полезно особенно в использовании с NSFetchedResultsController.

это ленивое дополнение к основным данным, которые никогда не должны были произойти. Это никогда не бывает более полезным или более эффективным, чем написание собственной процедуры сортировки. Написание метода удобства в подклассах для создания упорядоченного массива будет быстрее и эффективнее, чем использование NSOrderedSet.

когда вы используете NSFetchedResultsController это совершенно бесполезно, поскольку NSFetchedResultsController заказы все для вы.


Я согласен с ответом Маркуса Зарры, это, как правило, не функция, которую стоит использовать, но хотел добавить пару вещей. Я бы вообще рекомендовал добавить свойство для явных порядковых валов,которые вы можете сортировать.

заказанные наборы являются гражданами второго класса в основных данных даже для Apple, они не поддерживались в хранилищах данных iCloud Core (хотя были проблемы, как правило, с этой системой, и я считаю, что теперь она устарела в целом).

в терминах Swift можно было бы написать свой собственный упорядоченный набор с семантикой значений, но на данный момент невозможно включить мостик В и из упорядоченного набора Foundation.

Если вы действительно отчаянно хотите его поддержать, вы можете написать пользовательский генератор кода для создания аксессоров для вашего пользовательского типа набора (или просто добавить аксессоры вручную).

В заключение есть способы, которыми вы могли бы это сделать, но это не означает, что вы должны.