2016-04-13 53 views
36

Java .toString()用於打印類實例狀態的Swift等效項是什麼?Swift等效於Java .toString()

+0

更多信息@ http://stackoverflow.com/questions/24068506/how-can- i-change-the-textual-representation-displayed-a-type-in​​-swift –

回答

53

description屬性是你在找什麼。這是打印包含對象的變量時訪問的屬性。

您可以將description添加到您自己的類中,方法是採用協議CustomStringConvertible,然後執行description屬性。

class MyClass: CustomStringConvertible { 
    var val = 17 

    public var description: String { return "MyClass: \(val)" } 
} 

let myobj = MyClass() 
myobj.val = 12 
print(myobj) // "MyClass: 12" 

description當你調用String構造也可用於:

let str = String(myobj) // str == "MyClass: 12" 

這是訪問實例說明(而不是myobj.description推薦的方法,如果一個類沒有將無法正常工作實施CustomStringConvertible

+0

'String(obj)'怎麼辦? – nielsbot

+0

還有'.debugDescription'更適合程序員的版本 – nielsbot

+2

它適用於結構嗎? – lmiguelvargasf

6

您應該使用String(obj)

直接從the documentation for CustomStringConvertible

注意

字符串(例如)適用於任何類型的實例工作,如果實例恰好是CustomStringConvertible返回其 描述。 因此不鼓勵使用CustomStringConvertible作爲通用約束,或直接訪問符合類型的描述。

+0

似乎'CustomStringConvertible'的'description()'方法就足夠了。 –

4

如果可以使用結構而不是類,那麼沒有額外的工作。

結構只是打印精細本身輸出

print("\(yourStructInstance)") 

或類是這樣的:

print(String(describing: yourClassInstance))