Java toString()と同等のSwift


回答:


122

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"

descriptionStringコンストラクターを呼び出すときにも使用されます。

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

これは、インスタンスの説明にアクセスするための推奨される方法です(myobj.descriptionクラスが実装されていない場合は機能しませんCustomStringConvertible)。


どうString(obj)ですか?
nielsbot 2016

.debugDescriptionよりプログラマーに優しいバージョンもあります
nielsbot 2016

2
構造物に適用されますか?
lmiguelvargasf 2016年

1
はい、CustomStringConvertibleがPrintableに置き換わりました。@Antonio、それが変更されたとき、私は覚えていないが、それは長いスウィフト3.前に確かだった
vacawama

1
MyClassのは、NSObjectのから延長されなければならない
DàChún

7

クラスの代わりに構造体を使用できる場合は、追加の操作は何もしません。

structはそれ自体を出力に正しく出力します

print("\(yourStructInstance)")

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

print(String(describing: yourClassInstance))

6

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

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

注意

String(instance)は任意のタイプのインスタンスで機能し、インスタンスがCustomStringConvertibleである場合はその説明を返します。したがって、CustomStringConvertibleをジェネリック制約として使用したり、適合型の説明に直接アクセスしたりすることはお勧めしません。


description()方法でCustomStringConvertible十分なようです。
グレッグブラウン

5

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スウィフトライブラリー」

または、理解しやすくするために、クラスとdescriptionメソッドは次のようになります。

public class MyClass: NSObject {
   public var memberAttribute = "I'm an attribute"

   public override var description: String {
       return "My Class member: \(self.memberAttribute)"
   }
}

注: Modalクラスを拡張NSObjectするため、クラスがクラスに準拠するCustomStringConvertible必要がなくなりdescriptionNSObjectクラス自体から変数をオーバーライドすることになります。常に覚えておいてください、これCustomStringConvertibleは主にこれを達成するための純粋なSwiftの方法です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.