الهدف صفيف C منطقية
-
06-07-2019 - |
سؤال
ولست بحاجة للاستفادة من مجموعة من القيم المنطقية في موضوعية ج. أنا عندي وضعتها في الغالب، ولكن المترجم يلقي التحذير في البيان التالي:
[updated_users replaceObjectAtIndex:index withObject:YES];
وهذا هو، وأنا متأكد، لأن YES هي ببساطة ليست كائن. انها بدائية. بغض النظر، ولست بحاجة للقيام بذلك، وسوف نقدر كثيرا المشورة بشأن كيفية تحقيق ذلك.
وشكرا.
المحلول
نعم، هذا هو بالضبط ما هو عليه: وNS * حاويات يمكن تخزين فقط الأشياء الموضوعية-C، وليس أنواع بدائية
ويجب أن تكون قادرة على تحقيق ما تريد عن طريق لف عنه في NSNumber:
و[updated_users replaceObjectAtIndex:index withObject:[NSNumber numberWithBool:YES]]
وأو باستخدام @(YES)
الذي يلتف على BOOL
في NSNumber
و[updated_users replaceObjectAtIndex:index withObject:@(YES)]]
ويمكنك بعد ذلك سحب boolValue:
وBOOL mine = [[updated_users objectAtIndex:index] boolValue];
نصائح أخرى
وعلى افتراض مجموعة الخاصة بك تحتوي على كائنات صالحة (وليس مجموعة على غرار ج):
#define kNSTrue ((id) kCFBooleanTrue)
#define kNSFalse ((id) kCFBooleanFalse)
#define NSBool(x) ((x) ? kNSTrue : kNSFalse)
[updated_users replaceObjectAtIndex:index withObject:NSBool(YES)];
ويمكنك إما مخزن NSNumbers
:
[updated_users replaceObjectAtIndex:index
withObject:[NSNumber numberWithBool:YES]];
وأو استخدام C-مجموعة، اعتمادا على احتياجاتك:
BOOL array[100];
array[31] = YES;
وكما قلت جورج، استخدم C-صفيف.
BOOL myArray[10];
for (int i = 0; i < 10; i++){
myArray[i] = NO;
}
if (myArray[2]){
//do things;
}
ومارتين "myArray" هو الاسم الذي تستخدمه "مجموعة" في المثال جورج و.
ومن كسكودي 4.4 يمكنك استخدام حرفية الهدف-C.
و[updated_users replaceObjectAtIndex:index withObject:@YES];
وأين @YES
ما يعادل من [NSNumber numberWithBool:YES]
إذا مجموعتك كبير أو كنت تريد أن تكون أسرع من الأجسام objc، حاول أنواع CFBitVector
/ CFMutableBitVector
وجدت في CoreFoundation. انها واحدة من أنواع CF-مجموعات التي لا <م> لا م> سفينة مع نظيره NS، ولكنها يمكن أن تكون ملفوفة في فئة objc بسرعة، إذا رغبت في ذلك.