2016-01-29 82 views
11

可以在swift中知道結構的名稱?我知道這是可能的class在swift中打印結構名稱

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

打印這個類的名字,我只想做:

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

,但我可以做struct類似的東西?

如果我有一個struct

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

我怎樣才能得到名稱structExample」 這個struct

謝謝。

回答

9

如果您需要非實例化結構的名稱,你可以要求其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" 

關於斯威夫特3self.dynamicType已被重命名爲type(of: self)

6

這個純Swift版本的結構就像類:https://stackoverflow.com/a/31050781/2203005

如果你想類型對象本身的工作:

let structName = "\(structExample.self)" 

如果你有結構的實例:

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

滑稽足夠的Type對象似乎退換不符合CustomStringConvertible協議。因此它沒有「描述」屬性,儘管「」模式仍然是正確的。