简体   繁体   中英

In Swift 4, how can you get the string-representation of a data type stored in a variable of type 'Any'?

What is the easiest way to get the string-representation of a value's data type if that value is stored in an 'Any' variable?

For instance, I'm debugging code that has this...

extension SomeClass : Mappable{

    static func map(value:Any) -> SomeClass{

        return Parse(value)

    }
}

I'm trying to figure out what data types are being passed through the function, but if I use type(of:) I keep getting 'Any' and not the value held in it.

extension SomeClass : Mappable{

    static func map(value:Any) -> SomeClass{

        let nameOfType = ??? <-- This is what I'm trying to figure out
        log(nameOfType)

        return Parse(value)

    }
}

I simply want to print the data type to the debug window, not do testing with is or as , etc. It's strictly for logging/debugging reasons.

static func map(value:AnyObject) -> AnyClass{

    return value.classForCoder

}

Or

static func map(value:Any) -> AnyClass{

    return (value as AnyObject).classForCoder

}

In Swift 4 you can achieve that like this:

static func map(value: Any) -> Any.Type {
    return type(of: value)
}

Ok, I figured it out. It's a two-step process.

You have to:

  1. Use type(of:) to get the type of the variable (as others have described)
  2. Use String(describing:) to get the name of that type (that was the missing piece)

Here's an example...

let typeName = String(describing: type(of:value))

That's what I was after. Thanks for the other answers. Hope this helps!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM