クラスインスタンスの状態を出力するSwift toString()
と同等のJavaとは何ですか?
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"
これは、インスタンスの説明にアクセスするための推奨方法です(クラスがCustomStringConvertible
を実装していない場合は機能しないmyobj.description
とは対照的)
クラスの代わりに構造体を使用することが可能である場合、追加することはありません。
構造体は、出力自体にそのまま出力します
print("\(yourStructInstance)")
またはこのようなクラスで:
print(String(describing: yourClassInstance))
String(obj)
を使用する必要があります。
CustomStringConvertibleのドキュメント から直接:
注意
String(instance)は任意のタイプのインスタンスに対して機能し、インスタンスがCustomStringConvertibleである場合にその説明を返します。したがって、CustomStringConvertibleを一般的な制約として使用するか、準拠する型の説明に直接アクセスすることはお勧めしません。
NSObject
拡張クラスを使用した方法モデルクラスがNSObject
から拡張されている場合、次のように変数description
をオーバーライドする必要があります。
public override var description: String {
return "\n{\n index: \(self.index),\n"
+ " country: \(self.name),\n"
+ " isoCountryCode: \(self.isoCountryCode),\n"
+ " localeId: \(self.localeId),\n"
+ " flagImageName: \(self.flagImageName!)\n}"
}
ここではCountry
クラス内 、 "CountryPicker iOS Swift library" で、どのように実行したかを確認できます。
または、わかりやすくするために、クラスとdescription
メソッドは次のようになります。
public class MyClass: NSObject {
public var memberAttribute = "I'm an attribute"
public override var description: String {
return "My Class member: \(self.memberAttribute)"
}
}
注:NSObject
からModalクラスを拡張しているため、クラスがCustomStringConvertible
クラスに準拠する必要はありません。もはや、あなたはdescription
クラス自体からNSObject
変数をオーバーライドしています。常に覚えておいてください、CustomStringConvertible
はほとんどこれを達成する純粋なSwift方法です。