SORU
26 Ocak 2011, ÇARŞAMBA


Nasıl Objective-C değişken bağımsız değişken yöntemleri oluşturmak için

belki de bu olacak belli ki en basit, ama verir misiniz bir örnek oluşturmak da benzer yöntemler (objective-C) ve işlevleri C oluşturmak gibi işlevleri NSStringstringWithFormat: NSLog()

Sadece hatırlatmak için:

[NSString stringWithFormat:@"example tekst %i %@ %.2f",122,@"sth",3.1415"];
NSLog(@"account ID %i email %@",accountID,email);

NSString'In yöntemi stringWithFormat:, NSURL - urlWithFormat. benzer oluşturmak istiyorum

Şimdiden teşekkür ederim.

CEVAP
26 Ocak 2011, ÇARŞAMBA


Bu ne denir, genellikle, "variadic fonksiyonlar" (veya bunun gibi yöntemleri).

Bu oluşturmak için yeterlidirsonundasenin yöntem gibi , ... ile declartion

- (void)logMessage:(NSString *)message, ...;

Bu noktada muhtemelen en iyi printf-gibi bir fonksiyonu sıfırdan bir tane uygulama çalışıyor gibi sarmak istiyorum.

- (void)logMessage:(NSString *)format, ... {
  va_list args;
  va_start(args, format);
  NSLogv(format, args);
  va_end(args);
}

NSLogv kullanımı not 17**; NSLog(NSString *, ...); vs eğer; initWithFormat:arguments: NSString * bir dize istiyorsanız NSLogv(NSString *, va_list);, ya da düşünün.


Eğer, diğer taraftan, dizeleri, ama oldukça gibi bir şey olduğunu size

  (NSArray *)arrayWithObjects:(id)object, ... NS_REQUIRES_NIL_TERMINATION;

işleri çok daha kolay.

vprintftarzı bir işlevi yerine böyle bir durumda, bir döngü args gibi kimliği varsayarsak, geçiyor kullanın ve herhangi bir döngü olarak yorumlanabilir.

- (void)logMessage:(NSString *)format, ... {
  va_list args;
  va_start(args, format);

  id arg = nil;
  while ((arg = va_arg(args,id))) {
  /// Do your thing with arg here
  }

  va_end(args);
}

Bu son örnek, tabii ki, va_args listesi sıfır sonlandırılmış olduğunu varsayar.

Not:Bu işi yapmak içinolabilir<stdarg.h>; ama eğer hafızam beni yanıltmıyorsa, bu NSLogv ile bağlantılı olarak yer alır eklemek için, aşağı "Vakfı.bu arada gelir anlamı h", bu nedenle de "AppKit.h" ve "Kakao."diğerleri bir dizi yanı sıra; bu kutunun dışında çalışır. h

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • MovieZoneET

    MovieZoneET

    22 Aralık 2009
  • Nightmare2005

    Nightmare200

    14 Ocak 2007
  • skiesofblack.net

    skiesofblack

    14 HAZİRAN 2009