我想比较两个Swift对象的地址,例如:
let a: AnyObject
let b: AnyObject
a < b
当然这是不可能的,但我无法找到任何方法来实现这一目标。
我可以实现一个C函数来执行此操作
bool compare(NSObject *a, NSObject *b){
return a < b;
}
然后将其称为
compare(a, b)
但这限制了我使用NSObjects
。
所以我的问题是:有没有办法在Swift中实现这个目标?
答案 0 :(得分:3)
您可以使用返回UnsafePointer
值的unsafeAddressOf函数。
let elm0 = "hello world"
let elm1 = UIButton()
let address0 = unsafeAddressOf(elm0)
let address1 = unsafeAddressOf(elm1)
let compare = address0 > address1
希望这有帮助。
答案 1 :(得分:2)
我发现自己是一个答案。
有一个名为ObjectIdentifier
的结构,可以为您提供UIntValue来标识对象。
这个UIntValue看起来很像是对象引用,所以我会用它:
class Person {
var name: String
init(name: String){
self.name = name
}
}
NSLog("%p", ObjectIdentifier(Person(name: "James")).uintValue)
NSLog("%p", ObjectIdentifier(Person(name: "Berta")).uintValue)
NSLog("%p", ObjectIdentifier(Person(name: "Charly")).uintValue)
记录类似于:
的内容2015-08-29 15:04:21.567 App[10724:5283560] 0x7ff3a8415830
2015-08-29 15:04:21.568 App[10724:5283560] 0x7ff3a8643ba0
2015-08-29 15:04:21.568 App[10724:5283560] 0x7ff3a8415830