Swift 比较内存地址
Posted
技术标签:
【中文标题】Swift 比较内存地址【英文标题】:Swift compare memory addresses 【发布时间】:2015-08-29 12:58:00 【问题描述】:我想比较两个 Swift 对象的地址,比如:
let a: AnyObject
let b: AnyObject
a < b
当然这是不可能的,但我无法找到任何方法来实现这一点。
我可以只实现一个 C 函数来做到这一点
bool compare(NSObject *a, NSObject *b)
return a < b;
然后像这样称呼它
compare(a, b)
但这限制了我使用NSObjects
。
所以我的问题是:有什么方法可以纯粹在 Swift 中实现这一点?
【问题讨论】:
【参考方案1】:您可以使用返回UnsafePointer
值的unsafeAddressOf 函数。
let elm0 = "hello world"
let elm1 = UIButton()
let address0 = unsafeAddressOf(elm0)
let address1 = unsafeAddressOf(elm1)
let compare = address0 > address1
希望这会有所帮助。
【讨论】:
正是我想要的,比我自己的解决方案要好得多。这是在哪里记录的?我找不到这样的功能。 是的,但是您是如何找到该功能的?我不想每次都在寻找这样的全局函数时问一个问题。 ***.com/questions/24058906/… 好的,在 Stack Overflow 上进行深度搜索。遗憾的是 Swift 缺乏文档。感谢您的帮助。 我已经添加了苹果文档的链接(预发布,链接需要稍后更新)。【参考方案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
【讨论】:
以上是关于Swift 比较内存地址的主要内容,如果未能解决你的问题,请参考以下文章
当我尝试与另一个 NSString 进行比较时,NSString 仅显示内存地址