在swift中

时间:2016-01-29 16:09:28

标签: swift struct

可以在swift中知道结构的名称吗?我知道这可以用于class

示例

class Example {
   var variable1 = "one"
   var variable2 = "2"
}

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

NSStringFromClass(Example).componentsSeparatedByString(".").last!

但是我可以为struct执行类似的操作吗?

示例

如果我有struct

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

如何获取此struct的名称​​" structExample "

感谢。

3 个答案:

答案 0 :(得分:10)

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

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

print(StructExample.self) // prints "StructExample"

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

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

print(StructExample()) // prints "StructExample"

关于 Swift 3 self.dynamicType已重命名为type(of: self),例如此处。

答案 1 :(得分:7)

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

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

let structName = "\(structExample.self)"

如果您有结构的实例:

var myInstance = structExample()
let structName = "\(myInstance.dynamicType)"

有趣的是,返回的Type对象似乎不符合CustomStringConvertible协议。因此它没有'description'属性,尽管“”模式仍然是正确的。

答案 2 :(得分:0)

print("\(String(describing: Self.self))")