SORU
8 HAZİRAN 2014, Pazar


Swift eşdeğer -[NSObject açıklama] nedir?

Objective-C, kendi sınıf description bir yöntemi hata ayıklama yardımcı olmak için ekleyebilirsiniz:

@implementation MyClass
- (NSString *)description
{
    return [NSString stringWithFormat:@"<%@: %p, foo = %@>", [self class], foo _foo];
}
@end

Hata ayıklayıcı, sonra:

po fooClass
<MyClass: 0x12938004, foo = "bar">

Swift karşılığı nedir? Swift ÇOĞALTMA çıkış yararlı olabilir:

  1> class MyClass { let foo = 42 }
  2> 
  3> let x = MyClass()
x: MyClass = {
  foo = 42
}

Ama konsola yazdırmak için bu davranışı değiştirmek istiyorum

  4> println("x = \(x)")
x = C11lldb_expr_07MyClass (has 1 child)

Bir şekilde println Bu çıkış temizlemek için var mı? Printable protokol gördüm:

/// 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 }
}

Bu otomatik olarak "" println ama durum görünmüyor: hiç görmedim . olacağını düşündüm

  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)

Ve bunun yerine açıkça açıklama ararım:

 8> println("x = \(x.description)")
x = MyClass, foo = 42

Daha iyi bir yolu var mı?

CEVAP
8 HAZİRAN 2014, Pazar


Bazı deney yoluyla Printable DebugPrintable protokoller gerçek bir uygulama derlerken, ama ÇOĞALTMA ya da Oyun değil keşfettim.

Yan Not: Yazdığın kod doğru ancak bu durumda, muhtemelen DebugPrintable arıyoruz

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • backyardjay

    backyardjay

    8 ŞUBAT 2009
  • ColdfusTion

    ColdfusTion

    3 Aralık 2007
  • krotoflik

    krotoflik

    26 ŞUBAT 2011