[解決済み] NSObject description]のSwiftでの等価物は何ですか?
2022-04-22 09:58:10
質問
Objective-Cでは
description
メソッドをそのクラスに追加して、デバッグを支援します。
@implementation MyClass
- (NSString *)description
{
return [NSString stringWithFormat:@"<%@: %p, foo = %@>", [self class], foo _foo];
}
@end
そして、デバッガで、こうします。
po fooClass
<MyClass: 0x12938004, foo = "bar">
Swiftでは何に相当するのでしょうか?SwiftのREPL出力が参考になる。
1> class MyClass { let foo = 42 }
2>
3> let x = MyClass()
x: MyClass = {
foo = 42
}
しかし、コンソールに印刷するために、この動作をオーバーライドしたいのです。
4> println("x = \(x)")
x = C11lldb_expr_07MyClass (has 1 child)
これをきれいにする方法はあるのでしょうか
println
出力?を見たことがあります。
Printable
プロトコルを使用します。
/// This protocol should be adopted by types that wish to customize their
/// textual representation. This textual representation is used when objects
/// are written to an `OutputStream`.
protocol Printable {
var description: String { get }
}
これは自動的にquot;see"されると思いました。
println
が、そうではないようです。
1> class MyClass: Printable {
2. let foo = 42
3. var description: String { get { return "MyClass, foo = \(foo)" } }
4. }
5>
6> let x = MyClass()
x: MyClass = {
foo = 42
}
7> println("x = \(x)")
x = C11lldb_expr_07MyClass (has 1 child)
そして、その代わりに明示的にdescriptionを呼び出す必要があります。
8> println("x = \(x.description)")
x = MyClass, foo = 42
もっといい方法はないのでしょうか?
どのように解決するのですか?
これをSwift型で実装するためには
CustomStringConvertible
という文字列のプロパティを実装し、さらに
description
.
例えば
class MyClass: CustomStringConvertible {
let foo = 42
var description: String {
return "<\(type(of: self)): foo = \(foo)>"
}
}
print(MyClass()) // prints: <MyClass: foo = 42>
注
type(of: self)
は、明示的に 'MyClass' と記述する代わりに、現在のインスタンスの型を取得します。
関連
-
[解決済み】インスタンスメンバを型で使用することができない
-
[解決済み] Swift言語におけるエクスクラメーションマークの意味とは?
-
[解決済み] SwiftからObjective-Cのコードを呼び出すにはどうしたらいいですか?
-
[解決済み] Swiftで#pragmaマーク?
-
[解決済み] Swift Betaのパフォーマンス:配列のソート
-
[解決済み] Swiftでindexとelementでループを反復させる方法
-
[解決済み] Swiftの@selector()?
-
[解決済み】Objective-Cの"@synchronized "に相当するSwiftは何ですか?
-
[解決済み】Objective-CのisEqualToStringのSwiftに相当するものは何ですか?
-
[解決済み】SwiftのrespondsToSelectorに相当するものは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 型のインスタンスでは静的メンバを使用できません。
-
[解決済み] 型の不変値に変異型メンバを使用することはできません。
-
[解決済み] このコンテキストで型検索を行う場合、「メソッド」は曖昧である、Alamofireのエラー
-
[解決済み] Swift 3でdispatch_onceはどうなる?
-
スレッド1:シグナルSIGABRTの問題解決
-
[解決済み] Swift 3、Swift 4、それ以降で dispatch_sync, dispatch_async, dispatch_after などはどうすればいいですか?
-
[解決済み] String型のenumを列挙する方法は?
-
[解決済み] なぜ「Implicitly Unwrapped Optionals」を作るのか、それは値があることを知っていることを意味しているからです。
-
[解決済み】Swiftのenumのカウントを取得する方法は?
-
[解決済み】Swiftの`let`と`var`の違いは何ですか?