Swift 你能用一个物体';s实例地址作为objc_setAssociatedObject中的键?
通常,当使用Swift 你能用一个物体';s实例地址作为objc_setAssociatedObject中的键?,swift,unsafe-pointers,Swift,Unsafe Pointers,通常,当使用objc_setAssociatedObject时,建议的做法是创建一个静态变量,然后使用其地址(通过“&”前缀)作为键 但是,我们有一种情况,需要将任意数量的类与一个“所有者”类关联,因此,每个类都需要自己的唯一密钥。我的想法是使用类实例的实际地址 我遇到的问题是,我似乎只能以Int形式获取地址,但函数需要一个UnsafeRawPointer,而我还没有找到任何允许我初始化或从Int转换为Int的代码 同样地,虽然我可以用这个代码得到一个int的地址 func addressOf&
objc_setAssociatedObject
时,建议的做法是创建一个静态变量,然后使用其地址(通过“&”前缀)作为键
但是,我们有一种情况,需要将任意数量的类与一个“所有者”类关联,因此,每个类都需要自己的唯一密钥。我的想法是使用类实例的实际地址
我遇到的问题是,我似乎只能以Int形式获取地址,但函数需要一个UnsafeRawPointer
,而我还没有找到任何允许我初始化或从Int转换为Int的代码
同样地,虽然我可以用这个代码得到一个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
func addressOf(u-object:T)->Int{
返回unsafeBitCast(对象,收件人:Int.self)
}
设classA=MyClass()
设classB=classA
设a=addressOf(类别a)
设b=addressOf(类b)
//结果:a==b
我无法将a/b作为
UnsafeRawPointer
获取。这有可能吗?你看到你上一个问题的评论了吗?我没抓住目标。。。你要联想到什么?在中命名classA,让classA=MyClass()
,但MyClass()
的结果是对类型为MyClass
的对象的引用<键需要objc_setassociated object
中的code>UnsafeRawPointer,而键只是一个键,这就是为什么它通常用作静态键(类似于字典中使用的常量字符串键)。。。所以我迷路了…可能有50个类作为关联对象添加,所以我需要50个不同的键。这就是为什么我想使用实例数据本身的地址(与变量的地址相反,变量的地址是相同的,因此它会覆盖对象)作为键。