objective-c - ماهي - swift




التكرار على التعداد في الهدف جيم؟ (4)

لدي

enum Colour {
    white,
    pink,
    yellow,
    blue
} Colour;

وأود أن أفعل شيئًا كهذا:

for (int colour in Colour){
    // Do something here.
}

هل يمكنني القيام بذلك ، وإذا كان الجواب نعم ، كيف؟ شكرا لمساعدتك!


جئت إلى هذا المنصب للإجابة على هذا السؤال كذلك. إجابة جوبرا رائعة. ولكن قد يتقلب عدد العناصر الخاص بي ، ويرتبط بقيمة مخزنة ، حتى تكون أكثر أمانًا لأن عدد "coloursCount" هو قيمة صالحة أو لم تكن أبدًا ، انتهى بي الأمر إلى تنفيذ ما يلي وأردت إضافته إلى المناقشة:

MYColor.h

typedef NS_ENUM( NSInteger, MYColorType )
{
    MYColorType0 = 0,
    MYColorType1,
    MYColorType2,
    MYColorType3
};

static inline MYColorType MYColorTypeFirst() { return MYColorType0; }
static inline MYColorType MYColorTypeLast() { return MYColorType3; }

ViewController.m

for ( int i = MYColorTypeFirst(); i <= MYColorTypeLast(); i++ )
{
    MYColor * color = [[MYColor alloc] initWithType:i];
    ...
}

الإضافة البارزة هي تعريف MYColorTypeFirst () و MYColorTypeLast () ، المستخدم في التكرار لـ () ، والموضع بالقرب من تعريف التعداد للصيانة.


على الرغم من أن السؤال قد تمت الإجابة عليه بالفعل ، فإليك سنتان:

enum Colour {
    white = 0,
    pink,
    yellow,
    blue,

    colorsCount // since we count from 0, this number will be blue+1 and will be actual 'colors count'
} Colour;

for (int i = 0; i < colorsCount; ++i)
  someFunc((Colour)i);

أعتقد أنها ليست بهذا السوء وهي قريبة جدًا من التعداد السريع الذي تريده.


في الحالات التي لست فيها مؤلف التعداد ، أفعل ذلك مثل هذا. أعتقد أن هذا آمن في المستقبل ، لأنه لا يهتم بكيفية تنفيذ أنواع التعداد فعليًا.

    UISwipeGestureRecognizerDirection allDirections[] = {
        UISwipeGestureRecognizerDirectionDown,
        UISwipeGestureRecognizerDirectionLeft,
        UISwipeGestureRecognizerDirectionRight,
        UISwipeGestureRecognizerDirectionUp
    };

    for (int i = 0; i < sizeof(allDirections)/sizeof(allDirections[0]); ++i) {
        UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(onSwipe:)];
        swipeGesture.direction = allDirections[i];
        [self addGestureRecognizer:swipeGesture];
    }

يأتي التعداد من C في حين أن التعداد السريع كان إضافة للهدف 2.0 C .. لا يعملان معًا.

Type existingItem;
for ( existingItem in expression ) { statements }

يجب أن يتوافق التعبير مع بروتوكول NSFastEnumeration وأن يكون كائنًا! "عناصر" التعداد ليست كائنات.

انظر هذا الرابط لمزيد من المعلومات . وثائق التعداد السريع من Apple

تحقق من هذا المثال لمعرفة مدى سرعة التعداد:

NSArray *array = [NSArray arrayWithObjects:
        @"One", @"Two", @"Three", @"Four", nil];

for (NSString *element in array) {
    NSLog(@"element: %@", element);
}

NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:
    @"quattuor", @"four", @"quinque", @"five", @"sex", @"six", nil];

NSString *key;
for (key in dictionary) {
    NSLog(@"English: %@, Latin: %@", key, [dictionary objectForKey:key]);
}




objective-c