Я встречал это ключевое слово в разных случаях. Я знаю, что он должен делать. Но я действительно хочу лучше понять это.
Что я заметил о @NSManaged
- основанный не на документации, а на повторном использовании:
- Он волшебным образом заменяет кодирование ключевых значений.
- Это примерно эквивалентно
@dynamic
в Objective-C (о котором я мало что знаю) - Мне нужно это для подкласса
PFObject
изParse SDK
. Обычно он использует KVC для чтения/записи значений из/в бэкэнд. - Префикс любой переменной с
@NSManaged
закроет компилятор, когда я не инициализирую инициализатор.
Формальное определение (в Документах Apple Core Data):
Core Data предоставляет базовое хранилище и реализацию свойств в подклассах класса NSManagedObject. Добавьте атрибут @NSManaged перед каждым определением свойства в подклассе управляемого объекта, который соответствует атрибуту или отношениям в вашей модели данных ядра. Как и атрибут @dynamic в Objective-C, атрибут @NSManaged информирует компилятор Swift о том, что хранение и реализация свойства будут предоставлены во время выполнения. Однако, в отличие от @dynamic, атрибут @NSManaged доступен только для поддержки Core Data.
Что я получил от этого:
Переменные с
@NSManaged
должны быть исключены из проверки времени компиляции.
Я прочитал официальную документацию и другие другие вопросы по этому вопросу:
@synthesize vs @dynamic, каковы различия?
Что общего для использования @dynamic?
Я инстинктивно узнаю некоторые сценарии, где я должен его использовать. Я частично знаю, что он делает. Но я ищу более четкое понимание того, что он делает.
Дальнейшие наблюдения:
A PFObject
в Parse SDK
полагается на Key Value Coding
для доступа к своим значениям. PFObject
предоставляет следующие аксессоры:
objectForKey:
let score = results.objectForKey("descriptionOfResult")
//returns the descriptionOfResult value from the results object
setObject:forKey:
results.setObject("The results for a physics exam", forKey: "descriptionOfResult")
//sets the value of descriptionOfResult
Насколько я понимаю, @NSManaged
волшебно понимает, что объявленная переменная автоматически использует вышеуказанные аксессоры к get
и set
. Я хотел бы знать, как он это делает (если я понимаю, это правда) и все, что он делает.