Perfect! Thanks so much, I'll try that out.

Austin

> On Dec 29, 2015, at 5:31 PM, Joe Groff <[email protected]> wrote:
> 
> 
>> On Dec 29, 2015, at 4:50 PM, Austin Zheng via swift-dev 
>> <[email protected]> wrote:
>> 
>> Hello,
>> 
>> First, some background. I'm currently working on refactoring the way mirrors 
>> are handled within the Swift standard library (conversion from use of 
>> _Reflectable and _MirrorType to CustomReflectable).
>> 
>> Note that the _MirrorType protocol exposes an 'objectIdentifier' property 
>> which is only relevant for class instances. Each type's mirror would have to 
>> manually implement this property, with mirrors for non-class types expected 
>> to return nil.
>> 
>> CustomReflectable moves away from each type having a custom 
>> _MirrorType-conforming mirror type in favor of using Mirror for everything, 
>> which means that certain manually specified properties such as 
>> 'objectIdentifier' and 'summary' disappear, and must be replaced by other 
>> language features.
>> 
>> Now, the current way I distinguish between classes and non-class types (for 
>> the dump() function) is through the following code (variable names are made 
>> up):
>> 
>> if let thisClassThing = thisThing as? AnyObject {
>>  let theIdentifier = ObjectIdentifier(thisClassThing)
>>  // do other stuff...
>> }
>> 
>> (In the context of dump(), this is necessary to ensure that dumping an 
>> object with a cycle of references doesn't result in infinite recursion.)
>> 
>> However, where this breaks down is when Foundation is imported. In this 
>> case, performing as? or is casts/checks on a bridged Swift type such as 
>> String or Array<T> results in the test returning true or the type being 
>> bridged to an NS* object type.
>> 
>> My question is whether or not there exist tools in the stdlib to determine 
>> whether an instance is an instance of a class or not, while also being able 
>> to distinguish between native Swift bridgeable structs and their NS* 
>> equivalents. I have a few ideas I'm exploring but I wanted to run this 
>> question by the community first to see if there's anything I'm missing, or 
>> if anyone has any good ideas.
>> 
>> Thanks for your time, and if you have any questions I'd be happy to clarify.
> 
> You can ask if `thisThing.dynamicType is AnyObject.Type`, since the metatypes 
> of bridgeable types don't themselves bridge.
> 
> -Joe
> 
_______________________________________________
swift-dev mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-dev

Reply via email to