كيف يمكنني اختبار ما إذا كانت البدائية في الهدف - C هل لا شيء؟
-
23-08-2019 - |
سؤال
أنا أفعل شيكا في تطبيق iPhone -
int var;
if (var != nil)
إنه يعمل، ولكن في رمز X، يقوم هذا بإنشاء تحذير "مقارنة بين المؤشر وعدد صحيح". كيف أصلحه؟
لقد جئت من عالم Java، حيث أنا متأكد من أن البيان أعلاه سيفشل في الاستمتاع.
المحلول
البؤساء لا يمكن أن يكون nil
. nil
محفوظة للمؤشرات إلى كائنات الهدف C. nil
من الناحية الفنية من الناحية الفنية، ستؤدي نوع المؤشرات والأعداد الصحيحة بدون مقبلة دائما إلى وجود تحذير مترجم تقريبا، مع استثناء واحد: إنه موافق تماما لتحويل ضمنيا إلى تحويل عدد صحيح من 0 إلى مؤشر دون إيصال.
إذا كنت ترغب في التمييز بين 0 و "لا قيمة"، فاستخدم NSNumber
صف دراسي:
NSNumber *num = [NSNumber numberWithInt:0];
if(num == nil) // compare against nil
; // do one thing
else if([num intValue] == 0) // compare against 0
; // do another thing
نصائح أخرى
if (var) {
...
}
مرحبا بك في العالم الرائع من C. أي قيمة لا تساوي عدد صحيح 0 أو مؤشر فارغ صحيح.
ولكن لديك خطأ: ints لا يمكن أن تكون فارغة. انهم أنواع قيمة مثل في جافا.
إذا كنت ترغب في "مربع" عدد صحيح، فأنت بحاجة إلى طلب ذلك عن عنوانها:
int can_never_be_null = 42; // int in Java
int *can_be_null = &can_never_be_null; // Integer in Java
*can_be_null = 0; // Integer.set or whatever
can_be_null = 0; // This is setting "the box" to null,
// NOT setting the integer value