在学习Swift3.0时,看到值类型和引用类型的章节时,我们需要看看某个变量的地址。下面贴出打印地址的方法(这边是验证闭包是值类型还是引用类型)。有两种方法:
方法1:
var a = {
print("hpd")
}
var b = a
func address(o: UnsafeRawPointer) -> String {
return String.init(format: "%018p", Int(bitPattern: o))
}
print(address(o: &a))
print(address(o: &b))
输出结果:
"0x00007fff596a3158\n"
"0x00007fff596a3158\n"
方法2:
var a = {
print("hpd")
}
var b = a
withUnsafePointer(to: &a) {print($0)}
withUnsafePointer(to: &b) {print($0)}
输出结果:
"0x00007fff596a3158\n"
"0x00007fff596a3158\n"
验证闭包是引用类型。
其他的比如枚举,结构体等可以用上面方法打印地址。另外的,对于类实例,我们可以通过===
判断两个变量是否属于同一个实例。
class Dog{
var name:String?
init(name:String) {
self.name = name
}
}
var dog1 = Dog(name: "xiaoming")
var dog2 = dog1
dog1 === dog2
输出结果为:
true