可以在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 " ?
感谢。
答案 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))")