2012-11-02 17 views
16
-(NSMutableArray *)sortArrayByProminent:(NSArray *)arrayObject 
{ 
    NSArray * array = [arrayObject sortedArrayUsingComparator:^(id obj1, id obj2) { 
     Business * objj1=obj1; 
     Business * objj2=obj2; 
     NSUInteger prom1=[objj1 .prominent intValue]; 
     NSUInteger prom2=[objj2 .prominent intValue]; 
     if (prom1 > prom2) { 
      return NSOrderedAscending; 
     } 
     if (prom1 < prom2) { 
      return NSOrderedDescending; 
     } 
     return NSOrderedSame; 
    }]; 

    NSMutableArray *arrayHasBeenSorted = [NSMutableArray arrayWithArray:array]; 

    return arrayHasBeenSorted; 
} 

तो मूल रूप से मेरे पास यह ब्लॉक है जिसे मैं सरणी सॉर्ट करने के लिए उपयोग करता हूं।मैं एक उद्देश्य-सी विधि कैसे बना सकता हूं जो एक ब्लॉक

अब मैं उस विधि को लिखना चाहता हूं जो उस ब्लॉक को वापस कर दे।

मैं ऐसा कैसे करूं?

मैंने कोशिश की

+ (NSComparator)(^)(id obj1, id obj2) 
{ 
    (NSComparator)(^ block)(id obj1, id obj2) = {...} 
    return block; 
} 

चलो बस इसे अभी तक काम नहीं करता है का कहना है।

+0

वास्तव में आप "यह काम नहीं करता" क्या मतलब है? एक उचित त्रुटि विवरण के लिए यह रास्ता बहुत व्यापक है। –

उत्तर

50

एक विधि हस्ताक्षर वापस जाने के लिए इस तरह एक ब्लॉक होना चाहिए

+(NSInteger (^)(id, id))comparitorBlock { 
    .... 
} 

यह विघटित:

+(NSInteger (^)(id, id))comparitorBlock; 
^^ ^ ^^ ^^  ^
ab c  d e e b  f 

a = Static Method 
b = Return type parenthesis for the method[just like +(void)...] 
c = Return type of the block 
d = Indicates this is a block (no need for block names, it's just a type, not an instance) 
e = Set of parameters, again no names needed 
f = Name of method to call to obtain said block 

अद्यतन: अपने विशेष स्थिति में, NSComparator एक ब्लॉक प्रकार की पहले से ही है। इसकी परिभाषा है:

typedef NSComparisonResult (^NSComparator)(id obj1, id obj2); 

जैसे, तुम सब करने की जरूरत है इस typedef वापसी है:

+ (NSComparator)comparator { 
    .... 
} 
+3

नहीं। 'एनएससीओम्पेटर 'पहले से ही एक ब्लॉक प्रकार है। आप शायद या तो '+ (एनएससीओम्परिसन रीसेट (^) (आईडी, आईडी)) तुलनित्र 'या' + (एनएससीओम्परेटर) तुलनित्र' का मतलब था। –

+0

ओह, निरीक्षण! धन्यवाद। हाँ, मैं कम से कम इस प्रश्न के लिए, दोनों में से + + (एनएससीओम्परेटर) तुलनित्र 'के साथ जाऊंगा। – WDUK

+0

क्या आप पहले जवाब अपडेट करेंगे? –

संबंधित मुद्दे

 संबंधित मुद्दे