在swift中打印结构名称

Nos*_*lvi 15 struct swift

可以在swift中知道结构的名称吗?我知道这可能是class:

class Example {
   var variable1 = "one"
   var variable2 = "2"
}
Run Code Online (Sandbox Code Playgroud)

打印这个类名,我只想做:

NSStringFromClass(Example).componentsSeparatedByString(".").last!
Run Code Online (Sandbox Code Playgroud)

但我可以做类似的事struct吗?

如果我有struct:

struct structExample {
   var variable1 = "one"
   var variable2 = "2"
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到名称" structExample "这个struct

谢谢.

aya*_*aio 10

如果您需要非instanciated结构的名称,您可以要求它self:

struct StructExample {
    var variable1 = "one"
    var variable2 = "2"
}

print(StructExample.self) // prints "StructExample"
Run Code Online (Sandbox Code Playgroud)

对于一个实例,我将使用CustomStringConvertible和dynamicType:

struct StructExample: CustomStringConvertible {
    var variable1 = "one"
    var variable2 = "2"
    var description: String {
        return "\(self.dynamicType)"
    }
}

print(StructExample()) // prints "StructExample"
Run Code Online (Sandbox Code Playgroud)

关于Swift 3,这里self.dynamicType已经重命名type(of: self)为例子.


hnh*_*hnh 7

纯Swift版本适用于结构类似于类:https://stackoverflow.com/a/31050781/2203005.

如果您想处理类型对象本身:

let structName = "\(structExample.self)"
Run Code Online (Sandbox Code Playgroud)

如果你有一个struct的实例:

var myInstance = structExample()
let structName = "\(myInstance.dynamicType)"
Run Code Online (Sandbox Code Playgroud)

有趣的是,返回的Type对象似乎不符合CustomStringConvertible协议.因此它没有"描述"属性,尽管""模式仍然是正确的.