В Objective-C я обычно использовал бы что-то вроде этого:
static NSString *kViewTransformChanged = @"view transform changed";
// or
static const void *kViewTransformChanged = &kViewTransformChanged;
[clearContentView addObserver:self
forKeyPath:@"transform"
options:NSKeyValueObservingOptionNew
context:&kViewTransformChanged];
У меня есть два перегруженных метода на выбор для добавления наблюдателя для KVO с той лишь разницей, что это аргумент контекста:
clearContentView.addObserver(observer: NSObject?, forKeyPath: String?, options: NSKeyValueObservingOptions, context: CMutableVoidPointer)
clearContentView.addObserver(observer: NSObject?, forKeyPath: String?, options: NSKeyValueObservingOptions, kvoContext: KVOContext)
Когда Swift не использует указатели, я не уверен, как разыменовать указатель на использование первого метода.
Если я создаю свою собственную константу KVOContext для использования со вторым методом, я завершаю ее с просьбой:
let test:KVOContext = KVOContext.fromVoidContext(context: CMutableVoidPointer)
EDIT: В чем разница между CMutableVoidPointer и KVOContext? Может ли кто-нибудь дать мне пример, как использовать их оба, и когда я буду использовать один над другим?
РЕДАКТИРОВАТЬ № 2: Dev в Apple просто разместил это на форумах: KVOContext уходит; используя глобальную ссылку, так как ваш контекст - это путь прямо сейчас.