Swift比较内存地址

时间:2015-08-29 12:58:01

标签: swift

我想比较两个Swift对象的地址,例如:

let a: AnyObject
let b: AnyObject

a < b

当然这是不可能的,但我无法找到任何方法来实现这一目标。

我可以实现一个C函数来执行此操作

bool compare(NSObject *a, NSObject *b){
    return a < b;
}

然后将其称为

compare(a, b)

但这限制了我使用NSObjects

所以我的问题是:有没有办法在Swift中实现这个目标?

2 个答案:

答案 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