SORU
7 Temmuz 2009, Salı


Dönüştürmek objective-c typedef dize karşılığı

Bir typedef benim ilan var varsayarak .gibi h dosyası:

typedef enum {
  JSON,
  XML,
  Atom,
  RSS
} FormatType;

Bir dize için typedef sayısal değeri dönüştüren bir fonksiyon inşa etmek istiyorum. Mesajı [self toString:JSON] gönderilmiş olup, geri dönüş, örneğin,''. JSON

İşlevi bu gibi bir şey olacaktır

-(NSString *) toString:(FormatType)formatType {
  //need help here
  return [];
}

Eğer bu sözdizimi çalışırsam bu arada

[self toString:FormatType.JSON];

yöntem typedef değer vermek, bir hata alıyorum. Neyi kaçırıyorum?

CEVAP
7 Temmuz 2009, Salı


Bunu kolayca yapabilirsin. C ve Objective-C, çeteleler gerçekten sadece tamsayı sabitleri övmek. İsimleri kendiniz (ya da bazı basit istismarı ile) bir tablo oluşturmak gerekir. Örneğin:

// In a header file
typedef enum FormatType : NSString {
    JSON,
    XML,
    Atom,
    RSS
} FormatType;

extern NSString * const FormatType_toString[];

// In a source file
// initialize arrays with explicit indices to make sure 
// the string match the enums properly
NSString * const FormatType_toString[] = {
    [JSON] = @"JSON",
    [XML] = @"XML",
    [Atom] = @"Atom",
    [RSS] = @"RSS"
};
...
// To convert enum to string:
NSString *str = FormatType_toString[theEnumValue];

Bu yaklaşımın bir tehlike anında hiç numaralama değiştirin, adları bir dizi değiştirmek için hatırlamak zorunda. Bazı basit istismarı ile bu sorunu çözebilirsiniz, ama zor ve çirkin.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Benjamin Heckendorn

    Benjamin Hec

    4 Mayıs 2008
  • Caroline Saquet

    Caroline Saq

    1 EKİM 2011
  • Sean Murphy

    Sean Murphy

    4 ŞUBAT 2009