Можете ли вы использовать адрес экземпляра объекта в качестве ключа в objc_setAssociatedObject? - PullRequest
0 голосов
/ 17 января 2020

Обычно при использовании objc_setAssociatedObject рекомендуется создать переменную stati c, а затем использовать ее адрес (через префикс '&') в качестве ключа.

Однако у нас есть случай, когда нам нужно связать произвольное количество классов с одним классом «владельца», и, как таковой, каждому нужен свой уникальный ключ. Я думал использовать реальный адрес экземпляра класса для этой цели.

Проблема, с которой я сталкиваюсь, заключается в том, что я могу только получить адрес в виде Int, но функция ожидает UnsafeRawPointer и я не нашел ни одного кода, который позволил бы мне инициализировать или преобразовать в один из целых чисел.

Итак, еще раз, пока я могу получить адрес как int с этим кодом ...

func addressOf<T: AnyObject>(_ object: T) -> Int {
    return unsafeBitCast(object, to:Int.self)
} 

let classA = MyClass()
let classB = classA

let a = addressOf(classA)
let b = addressOf(classB)

// Result: a == b

Я не могу получить а / б как UnsafeRawPointer. Это вообще возможно?

...