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.
Если вы действительно отчаянно хотите его поддержать, вы можете написать пользовательский генератор кода для создания аксессоров для вашего пользовательского типа набора (или просто добавить аксессоры вручную).
В заключение есть способы, которыми вы могли бы это сделать, но это не означает, что вы должны.