Thanks a lot Andrew and Quinn, After your explanation, I understand the following better now:
- It makes sense to get the memory address of a reference type as it represents identity. Just realised there is also === identity operator to check if it is the same reference. - The need to get the memory address of a value type might not be of the same significance (as it is a value) and the emphasis would be more on the equality of the value. - And model based on whether the entity represents identity / value Thanks and regards, Muthu > On 13 Sep 2017, at 1:19 AM, Andrew Trick <atr...@apple.com> wrote: > >> >> On Sep 12, 2017, at 9:55 AM, somu subscribe via swift-users >> <swift-users@swift.org> wrote: >> >> Hi Quinn, >> >> Thanks for the reply, >> >> It is an iOS Swift project (uses Foundation, UIKit, CloudKit and other >> native frameworks) in which I would like to check the memory address for >> debugging (and out of enthusiasm). There is no C code I am using. >> >> I have some asynchronous call back functions from CloudKit frameworks which >> return CKUserIdentity objects. >> >> So thought it would be nice if I could print the memory address of >> CKUserIdentity objects and to check if it was unique. >> >> And there are some other custom Swift Structs which I would like to know the >> memory address of. >> >> Thanks and regards, >> Muthu > > For classes, use the Unmanaged API as Quinn’s suggested. > > Your structs, tuples, and enums only have an address during mutation. So, for > example, if you wrap all of your code in a function that takes the variable > `inout`, you’ll see a consistent address within a single call to that > function. There’s an implicit cast from `inout` to Unsafe[Mutable]Pointer > arguments, so you can inspect the pointer value... > > func foo(p: Unsafe[Mutable]Pointer) { print(p) } > > foo(&s2) > > As you noticed, between calls to `foo` you could see a different address. > > If you really want to give your structs an “identity” you would need to wrap > them in a class. > > -Andy > >>> On 12 Sep 2017, at 10:35 PM, Quinn The Eskimo! via swift-users >>> <swift-users@swift.org> wrote: >>> >>> >>> On 12 Sep 2017, at 13:44, somu subscribe via swift-users >>> <swift-users@swift.org> wrote: >>> >>>> 1. Is the above shown the correct way to get reference type memory address >>>> ? >>>> 2. What Is it the correct way to get value type memory address ? >>> >>> It’s hard to answer that without knowing how you’re intended to use these >>> techniques. If you can explain more about where you’re going with this, I >>> should be able to make some specific recommendations. >>> >>> For example, if you’re goal were to pass a Swift object to a C API that >>> takes a callback function pointer and a ‘cookie’ value, and hen calls that >>> function with that cookie (like the `qsort_r` function), the to/from opaque >>> mechanism provider by `Unmanaged` is the recommended way to pass a Swift >>> object through such a cookie value. >>> >>>> 3. Is it possible to get the memory address of immutable value type >>>> (declared as let) >>> >>> No, because such values don’t necessarily exist in memory. >>> >>> Share and Enjoy >>> -- >>> Quinn "The Eskimo!" <http://www.apple.com/developer/> >>> Apple Developer Relations, Developer Technical Support, Core OS/Hardware >>> >>> >>> _______________________________________________ >>> swift-users mailing list >>> swift-users@swift.org >>> https://lists.swift.org/mailman/listinfo/swift-users >> >> _______________________________________________ >> swift-users mailing list >> swift-users@swift.org <mailto:swift-users@swift.org> >> https://lists.swift.org/mailman/listinfo/swift-users >> <https://lists.swift.org/mailman/listinfo/swift-users>
_______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users