Использование ключевого значения в Swift - PullRequest
0 голосов
/ 21 ноября 2018

Я хочу знать, как использовать KVO в swift, когда я читал в Apple Doc или любых других онлайн-статьях, в которых говорится, что он обеспечивает косвенный доступ к свойствам и адресуется через строку.У меня есть ряд сомнений.

  • Если я могу установить свойство напрямую через person.name = "John" они зачем использовать Set Value для ключа name = "John" косвенно
  • В Apple doc утверждают, что кодирование значения ключа может участвовать в широком спектре технологий Cocoa, таких как Core Data .Почему он используется, а не в других платформах
  • Он используется во время выполнения или динамически для установки значения.Как это?
  • Является ли это TypeSafe и как?
  • Это функция Objective-C, тогда почему до сих пор используется в Swift 4 с последними улучшениями с . / Type.property получить доступ и установить

1 Ответ

0 голосов
/ 21 ноября 2018

Если я могу установить свойство напрямую через person.name = "John", зачем им косвенно использовать значение Set для ключа name = "John"

Пожалуйста, прочитайте «В чем смысл кодирования ключ-значение?»


В Apple doc утверждают, что совместимость кодирования ключ-значение может участвовать в широком спектре технологий Cocoa, таких как Core Data.Почему он используется, а не в других платформах

Используется там, где это необходимо.Он используется там, где это полезно, и производительность приемлема.Если это бесполезно или если его производительность слишком низкая, он не используется.


Он используется во время выполнения или динамически для установки значения.Как это?

Кодирование значения ключа использует среду выполнения Objective C для поиска методов получения и установки, а также для поиска типов и местоположений переменных экземпляра, если установщики не существуют.См. Friday Q & A 2013-02-08: Давайте создадим кодирование значения ключа для подробного анализа.

Документация Apple кратко описывает реализацию наблюдения значения ключа здесь ,Это достаточно коротко, чтобы полностью процитировать:

Автоматическое наблюдение значения ключа реализовано с использованием техники, называемой isa-swizzling .

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

Когда наблюдатель зарегистрирован для атрибута объекта, указатель isa наблюдаемого объекта изменяется, указывая скорее на промежуточный классчем в истинном классе.В результате значение указателя isa не обязательно отражает фактический класс экземпляра.

Вы никогда не должны полагаться на указатель isa для определения членства в классе.Вместо этого вы должны использовать метод class для определения класса экземпляра объекта.

Майк Эш дал более подробный анализ в Friday Q & A 2009-01-23 .


Это TypeSafe и как?

Это не особо безопасно для типов.Например, это не мешает вам хранить UIView в свойстве, которое объявлено как NSString, или наоборот.

Это функция Objective-C, тогда почему все еще используется в Swift4 с последними улучшениями с доступом ./Type.property и установленным

Он все еще используется, потому что большая часть SDK Apple все еще реализована в Objective-C, и потому что он позволяет вам делать вещи, которые вы не можете делать вБыстро, без лишних «шаблонов» (ручные, повторяющиеся функции).Компромисс в том, что Objective-C - это более низкая производительность.Во многих случаях снижение производительности Objective-C (по сравнению со Swift) не является существенной проблемой, а повышенный динамизм очень полезен.

...