Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 你能用一个物体';s实例地址作为objc_setAssociatedObject中的键?_Swift_Unsafe Pointers - Fatal编程技术网

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个不同的键。这就是为什么我想使用实例数据本身的地址(与变量的地址相反,变量的地址是相同的,因此它会覆盖对象)作为键。