Ios 尝试打印变量地址->;模拟访问0xXXX,但修改需要独占访问

Ios 尝试打印变量地址->;模拟访问0xXXX,但修改需要独占访问,ios,swift,xcode,Ios,Swift,Xcode,如果有人能告诉我修改的地方和原因,我将不胜感激 这项新的狗屎技术需要如此奇怪的舞蹈来打印一个可变地址。我已经花了一个小时试图弄明白这一点 let name = file.name withUnsafePointer(to: &file) { print ("GETDEPOSIT: \(name) \(file.nameSuffix) file has address: \($0)") } U

如果有人能告诉我修改的地方和原因,我将不胜感激 这项新的狗屎技术需要如此奇怪的舞蹈来打印一个可变地址。我已经花了一个小时试图弄明白这一点

        let name = file.name
        withUnsafePointer(to: &file) {
            print ("GETDEPOSIT: \(name) \(file.nameSuffix)   file has address: \($0)")
        }
UPD感谢Martin R和Sweeper。清扫者的回答确实解决了这场车祸 但地址确实不同:

class BVFile { ... }
class OperationCell: UICollectionViewCell {
    var file: BVFile!
}
那是由这个

GETDEPOSIT: Сберегательный вкл@д 166,63 BYN Optional(" 166,63 BYN")   file has address: 0x00007fd8fc555578 0x0000600003194840
GETDEPOSIT: Зручны анл@йн 0 BYN Optional(" 0 BYN")   file has address: 0x00007fd8fc55e138 0x00006000031ea040
报告说得很清楚:

通过指针临时使用的实例。请注意,inout独占性规则意味着,与任何其他inout参数一样,
在正文期间不能被其他代码直接访问。
访问只能通过指向
正文
的指针参数进行,直到
正文
返回

因此,您不能直接在
{…}
中访问
文件。您可以使用
$0.pointee

        let address = Unmanaged.passUnretained(file).toOpaque()
        withUnsafePointer(to: &file) {
            print ("GETDEPOSIT: \(name) \($0.pointee?.nameSuffix)   file has address: \($0) \(address)")
        }

文件是OperationCell中的强制展开变量。修改了问题get address,如下所示:let address=Unmanaged.passUnretained(file).toOpaque(),但我仍然很好奇为什么旧的swift方法失败了如果删除操作符的地址会发生什么
使用unsafepointer(指向:file){…}
@MartinR这使它成为一个不同的地址,不是吗?@Sweeper:你说得对。它们都不等于
Unmanaged.passUnretained(file).toOpaque()的值
print ("GETDEPOSIT: \(name) \($0.pointee.nameSuffix) file has address: \($0)")