SORU
11 Mayıs 2009, PAZARTESİ


Kesinlikle yazılan koleksiyonları Objective-C var mı?

Biz Java Mac/iPhone programlama yeniyim ve Objective-C, C# ve "jenerik", toplama tek tip ilan veren sınıflar. C örneğin,#

Dictionary<int, MyCustomObject>

tek tip MyCustomObject olan tamsayılar ve değerleri anahtarlar içerebilir. Benzer bir mekanizma Objective-C var mı?

CEVAP
8 HAZİRAN 2015, PAZARTESİ


Güncellemelerinden 7, Apple 'Hafif Jenerik' Objective-C Objective-C tür bir uyuşmazlık varsa derleyici uyarıları oluşturur. tanıttı

NSArray<NSString*>* arr = @[@"str"];

NSString* string = [arr objectAtIndex:0];
NSNumber* number = [arr objectAtIndex:0]; // Warning: Incompatible pointer types initializing 'NSNumber *' with an expression of type 'NSString *'

Ve Swift kodu, derleyici bir hata üretir:

var str: String = arr[0]
var num: Int = arr[0] //Error 'String' is not convertible to 'Int'

Hafif Jenerik NSArray, NSDictionary ve NSSet ile kullanılmak üzere tasarlanmıştır, ama aynı zamanda kendi sınıflarını ekleyebilirsiniz:

@interface GenericsTest<__covariant T> : NSObject

-(void)genericMethod:(T)object;

@end

@implementation GenericsTest

-(void)genericMethod:(id)object {}

@end

Objective-C derleyici uyarısı ile daha önce yaptığı gibi davranır.

GenericsTest<NSString*>* test = [GenericsTest new];

[test genericMethod:@"string"];
[test genericMethod:@1]; // Warning: Incompatible pointer types sending 'NSNumber *' to parameter of type 'NSString *'

ama Swift Genel Bilgiler tamamen göz ardı eder.

var test = GenericsTest<String>() //Error: Cannot specialize non-generic type 'GenericsTest'

Bu Vakfı koleksiyon sınıfları daha dışında, Objective-C hafif jenerik Swift tarafından dikkate alınmaz. Başka tür hafif jenerik kullanıyorsanız unparameterized olsalardı kadar Hızlı alınır.

Interacting with Objective-C APIs

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BSA

    BSA

    9 NİSAN 2012
  • Emotional Trancer

    Emotional Tr

    4 Mart 2010
  • tinycammonitor

    tinycammonit

    14 Aralık 2010