2013-01-11 27 views
7

मिलान चलो कहते हैं कि मैं एक NSSet उस प्रकार आईडी < आकार >NSSet उपयोग विधेय वस्तुओं वापस जाने के लिए किसी वर्ग

की वस्तुओं का संग्रह होता चला रहे हैं। । । जिनमें सर्कलशिप, स्क्वायरशैप, हेक्सागोनलशिप उदाहरण हैं (वास्तविक प्रोटोकॉल या कक्षा के नाम नहीं)। ।

सर्कलशिप के सभी उदाहरणों को वापस करने के लिए कोड की भविष्यवाणी या किसी अन्य पंक्ति का उपयोग करना संभव है?

उत्तर

11

आप इस प्रकार का ब्लॉक आधारित विधेय का उपयोग कर सकते हैं:

NSSet *yourSet = ...; 
NSPredicate *pred = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) { 
    return [evaluatedObject isKindOfClass:[CircleShape class]]; 
}]; 
NSSet *filteredSet = [yourSet filteredSetUsingPredicate:pred]; 

यह CircleShape की CircleShape के सभी उदाहरणों या उपवर्गों लौट आते हैं। isMemberOfClass का उपयोग करें यदि आप कक्षा के केवल उदाहरण चाहते हैं, लेकिन उप-वर्गों के नहीं।