NscomparisonResult و Nscomparator - ما هي؟
-
29-09-2019 - |
سؤال
ما هو NSComparisonResult
و NSComparator
?
لقد رأيت واحدة من التعريفات النوعية ، شيء من هذا القبيل:
typedef NSComparisonResult (^NSComparator)(id obj1, id obj2);
هل هو مختلف عن مؤشر الوظيفة؟
أيضا ، لا يمكنني حتى تخمين ما ^
الرمز يعني.
المحلول
^
يدل نوع الكتلة, ، مماثلة في مفهوم مؤشر الوظيفة.
typedef NSComparisonResult (^NSComparator)(id obj1, id obj2);
// ^ ^ ^
// return type of block type name arguments
هذا يعني أن النوع NSComparator
هو الكتلة يأخذ في كائنين من النوع id
اتصل obj1
و obj2
, ، ويعيد NSComparisonResult
.
خاصة NSComparator
تم تعريفه في مرجع أنواع بيانات الأساس.
ولتعلم المزيد حول كتل C ، تحقق من مقالة ADC هذه يمنع موضوعات البرمجة.
مثال:
NSComparator compareStuff = ^(id obj1, id obj2) {
return NSOrderedSame;
};
NSComparisonResult compResult = compareStuff(someObject, someOtherObject);
نصائح أخرى
إجابة يعقوب جيدة ، ولكن الإجابة على الجزء حول "كيف يختلف هذا عن مؤشر الوظيفة؟":
1) كتلة ليس مؤشر وظيفة. الكتل هي تناول Apple حول كيفية جعل الوظائف من الدرجة الأولى المواطنين في C/C ++/Objective-C. إنه جديد على iOS 4.0.
2) لماذا تقديم هذا المفهوم الغريب؟ تبين أن وظائف الدرجة الأولى مفيدة في عدد قليل من السيناريوهات ، على سبيل المثال إدارة أجزاء العمل التي يمكن تنفيذها بالتوازي ، كما في Grand Central Dispatch. ما وراء GCD ، النظرية مهمة بما يكفي لوجود أنظمة برامج كاملة حولها. كان لايس واحد من أوائل.
3) سترى هذا المفهوم في العديد من اللغات الأخرى ، ولكن بأسماء مختلفة. على سبيل المثال ، لدى Microsoft .NET Lambdas ومندوبون (لا علاقة له بمندوبين الهدفين) ، في حين أن الأسماء الأكثر واقعية هي على الأرجح وظائف مجهولة أو وظائف الدرجة الأولى.
NSComparisonResult comparisionresult;
NSString * alphabet1;
NSString * alphabet2;
// Case 1
alphabet1 = @"a";
alphabet2 = @"A";
comparisionresult = [alphabet1 caseInsensitiveCompare:alphabet2];
if (comparisionresult == NSOrderedSame)
NSLog(@"a and a are same. And the NSComparisionResult Value is %ld \n\n", comparisionresult);
//Result: a and a are same. And the NSComparisionResult Value is 0
// Case 2
alphabet1 = @"a";
alphabet2 = @"B";
comparisionresult = [alphabet1 caseInsensitiveCompare:alphabet2];
if (comparisionresult == NSOrderedAscending)
NSLog(@"a is greater than b. And the NSComparisionResult Value is %ld \n\n", comparisionresult);
//Result: a is greater than b. And the NSComparisionResult Value is -1
// Case 3
alphabet1 = @"B";
alphabet2 = @"a";
comparisionresult = [alphabet1 caseInsensitiveCompare:alphabet2];
if (comparisionresult == NSOrderedDescending)
NSLog(@"b is less than a. And the NSComparisionResult Value is %ld", comparisionresult);
//Result: b is less than a. And the NSComparisionResult Value is 1