2016-01-29 2 views
-1

При создании объекта отношения управляемого (т.е. один ко многим), а затем создать подкласс NSManagedObject, вы бы кодировать эти отношения как:Использования набранного Набор в CoreData NSManaged отношений

@NSManaged var dogs: NSSet 

Но я узнал что вместо этого вы можете написать:

@NSManaged var dogs: Set<Dog> 

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

Отредактировано: На самом деле, я обнаружил, что вы можете использовать insert и remove метод набора, так что это еще проще.

Я знаю о Swift автоматической bridging из некоторых классов Foundation для классов Swift (т.е. NSArray к Array и NSSet к Set).

Но я не нашел об использовании наборов с набором Swift для реализации подклассов объектов, управляемых базовыми данными, в docs или в любом другом учебнике, и мне интересно, почему.

Я использую Xcode 7.2 и Swift 2, и он отлично работает в моем проекте. Это также работает для кого-то другого? какой-нибудь документ от Apple? или это плохая идея, по какой-то причине мне не хватает?

+1

Он работает, и это отличный подход. Я делаю это в нескольких своих проектах. –

+0

Спасибо @PetahChristian за подтверждение. – FranMowinckel

+0

@PetahChristian не могли бы вы подтвердить, что методы 'insert' и' remove' 'Set' также работают? Потому что он работает для меня, а затем я нахожу довольно глупым подход к добавлению функций @NSManaged addX. – FranMowinckel

ответ

1

Да, это распространенная практика среди многих разработчиков, насколько я знаю.

Фактически, сгенерированные подклассы NSManagedObject совсем не идеальны, когда речь идет о сгенерированных типах. Например, у примитивов все еще есть проблемы, и NSNumber иногда мосты успешно доходят до Bool, иногда нет. Довольно часто мне приходилось модифицировать дополнительное состояние .

Если вы оставите предустановленный NSSet, вы все равно можете использовать его для Set<Type>, что и было сделано до того, как вы привыкли менять созданные свойства подклассов на множество.

+0

На самом деле, я только что узнал сегодня в своем собственном, и мне было интересно, есть ли где-нибудь какой-либо документ Apple (запись в блоге или учебник, это тоже нормально), потому что я считаю это весьма полезным. Если вы можете предоставить ссылку, подтверждающую утверждение о распространенной практике, и я с радостью согласился бы с вашим ответом. – FranMowinckel

+0

Я не вижу, как запись в блоге имеет больше полномочий, чем опытные члены StackOverflow. На самом деле, многие записи в блогах и учебники вызваны ошибками и упущениями. Я могу подтвердить, что Apple не обратилась к этому в официальной документации (и были бы веские причины, почему это необязательно). Я мог бы дать более подробную информацию с помощью технического объяснения или расширять то, как соглашение «NSSet» вышло из наследия Objective-C, но я не считаю, что это имеет какую-либо продуктивную ценность. – Mundi

+0

Потому что вы заявили, что это обычная практика. Я также рассмотрел официальные документы Apple и WWDC, а в примерах, которые они используют «NSSet», и я не нашел ни одного вопроса StackOverflow ни (кроме нескольких из них, на которые я ответил сам).Вопрос в том, работает ли это для кого-то еще (что уже подтверждено) и почему он не упоминается где-то еще. – FranMowinckel