2009-01-09 11 views
20

मुझे आश्चर्य है कि अगर यह की तरह कुछ के साथ ऑब्जेक्टिव-सी में एक वर्ग प्रदान करना संभव (और कैसे) है: यह एक परियोजना मैं कर रहा हूँ के लिए बहुत आसान हो सकता हैक्या उद्देश्य-सी में LINQ के समान कुछ है?

Person.Select(@"Name").OrderAsc(@"Name").Where(@"Id").EqualTo(1).And(@"Id").NotEqualTo(2).Load<Array> 

मुझे Django & सबसोनिक में मौजूद कोडिंग के इस तरीके को पसंद है।

+2

मुझे उद्देश्य-सी में समकक्ष LINQ पसंद आएगा। किसी को लिखना चाहिए! –

+2

@ जोनाथन स्टर्लिंग - मेरे पास है! https: // GitHub।com/ColinEberhardt/LinqToObjectiveC – ColinE

+1

@ जोनाथन स्टर्लिंग, कृपया गिटहब पर उपलब्ध LINQ4Obj-C की जांच करें: https://github.com/michalkonturek/LINQ4Obj-C। आप यहां दस्तावेज़ ढूंढ सकते हैं: http://cocoadocs.org/docsets/LINQ4Obj-C/1.0.0/ –

उत्तर

6

संक्षिप्त उत्तर यह है कि उद्देश्य-सी के लिए लिंक के बराबर नहीं है लेकिन आप इसे पसंद करते हुए एक रैपर वर्ग में SQLite, NSPredicate और CoreData कॉल के मिश्रण के साथ नकली बना सकते हैं। आपको शायद core data guide, predicate guide, और this example code में रुचि होगी।

NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Employee" 
     inManagedObjectContext:managedObjectContext]; 
[request setEntity:entity]; 
// assume salaryLimit defined as an NSNumber variable 
NSPredicate *predicate = [NSPredicate predicateWithFormat: 
     @"salary > %@", salaryLimit]; 
[request setPredicate:predicate]; 
NSError *error = nil; 
NSArray *array = [managedObjectContext executeFetchRequest:request error:&error]; 
5

ऐसा करने के लिए विंडोज और कोको तरीकों की तुलना में एक एक्टिकल है। कोको कुंजी रास्तों और NSPredicate का उपयोग करता है ....

Cocoa is my Girlfriend

3

मैं अपने उदाहरण के लिए विशिष्ट लगता है कि यह कोको में बराबर होगा:

NSArray *people = /* array of people objects */ 

NSPredicate *pred = [NSPredicate predicateWithFormat:@"Id = 1 AND Id != 2"]; 
NSSortDescriptor *byName = [[NSSortDescriptor alloc] initWithKey:@"Name" ascending:YES]; 
NSArray *descriptors = [NSArray arrayWithObject:[byName autorelease]]; 

NSArray *matches = [people filteredArrayUsingPredicate:pred]; 
NSArray *sortedMatches = [matches sortedArrayUsingDescriptors:descriptors]; 

NSArray *justNames = [sortedMatches valueForKey:@"Name"]; 

यह LINQ उदाहरण से कुछ अधिक वर्बोज़ है और मेरी कुछ रेखाएं संयुक्त हो सकती थीं लेकिन मेरी आंखों पर पार्स करना आसान है।

0

चेक बाहर निम्नलिखित भंडार: https://github.com/ziminji/objective-c-sql-query-builder

इन कक्षाओं कि SQLite के लिए जल्दी से अच्छी तरह से गठित एसक्यूएल प्रश्नों के निर्माण के लिए इस्तेमाल किया जा सकता सुविधा के तरीकों का एक सेट प्रदान

ऊपर विधेय गाइड से

। वे उपयोग करने के लिए काफी सरल हैं और अपेक्षाकृत सीधे आगे हैं क्योंकि वे बुनियादी SQL वाक्यविन्यास का पालन करते हैं।

15

मैंने ऑब्जेक्टिव सी के लिए अपना स्वयं का लिंक-स्टाइल एपीआई बनाया, जो available on github है। अपने विशिष्ट उदाहरण कुछ इस तरह दिखेगा:

NSArray* results = [[[people where:^BOOL(id person) { 
           return [person id] == 1 && [person id] != 2; 
          }] 
          select:^id(id person) { 
           return [person name]; 
          }] 
          sort]; 
+0

आपकी लाइब्रेरी किस लाइसेंस के तहत उपलब्ध है? क्या मैं इसे वाणिज्यिक सॉफ्टवेयर में उपयोग कर सकता हूं? –

+1

@Zoidberg - अच्छा बिंदु, मैंने लाइसेंस का संकेत नहीं दिया था। मैंने अभी एमआईटी लाइसेंस शामिल करने के लिए परियोजना को अपडेट किया है, इसलिए यह वाणिज्यिक उपयोग के लिए ठीक होना चाहिए। – ColinE

+0

यह वास्तव में अच्छा है, यह linq के समान ही है, सिवाय इसके कि ऐसा लगता है कि आप भविष्यवाणी के बजाय अनाम विधियों का उपयोग कर रहे हैं? –

3

मेरे परियोजना, LINQ4Obj-सी, ऑब्जेक्टिव-सी करने के लिए बंदरगाहों LINQ मानक क्वेरी ऑपरेटरों।

आप इसे github और इसकी docs here पर पा सकते हैं। यह लाइब्रेरी CococaPods के माध्यम से भी उपलब्ध है।

इस परियोजना का स्रोत कोड मानक एमआईटी लाइसेंस के तहत उपलब्ध है।

आपका उदाहरण इस प्रकार दिखाई देगा:

id results = [[[people linq_where:^BOOL(id person) { 
    return ([person ID] == 1); 
}] linq_select:^id(id person) { 
    return [person name]; 
}] linq_orderByAscending]; 

नायब मैं दूसरी शर्त हटा दिया यह व्यर्थ है के रूप में (आईडी = 2!)।

फिलहाल पुस्तकालय संग्रह कक्षाओं के लिए विस्तार विधियों (श्रेणियों) प्रदान करता है, लेकिन भविष्य में मैं अपनी कार्यक्षमता को कोर डेटा तक सीधे क्वेरी पहुंच प्रदान करने के लिए NSManagedObjectContext पर भी बढ़ाऊंगा।

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