web-dev-qa-db-ja.com

Swift Java toString()と同等

クラスインスタンスの状態を出力するSwift toString()と同等のJavaとは何ですか?

70
Marcus Leon

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とは対照的)

94
vacawama

クラスの代わりに構造体を使用することが可能である場合、追加することはありません。

構造体は、出力自体にそのまま出力します

print("\(yourStructInstance)")

またはこのようなクラスで:

print(String(describing: yourClassInstance))
7
Andrey

String(obj)を使用する必要があります。

CustomStringConvertibleのドキュメント から直接:

注意

String(instance)は任意のタイプのインスタンスに対して機能し、インスタンスがCustomStringConvertibleである場合にその説明を返します。したがって、CustomStringConvertibleを一般的な制約として使用するか、準拠する型の説明に直接アクセスすることはお勧めしません。

6
Ewan Mellor

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方法です。

2
Randika Vishman