0

我刚刚开始开发这个库

它的主要目标是允许程序员编写像句子一样的方法名称来使用 Core Data。

例子:

[moc RD_createUserWithName:@"John" age:@29 married:@YES];
[moc RD_createCompanyWithName:@"Yandex, LLC" ceo:me managers:@[firstManager, secondManager]];
[moc RD_createCompanyWithName:@"Google" ceos:@[larryPage, sergeyBrin] manager:jonathanGreen];
[moc RD_createBookWithAuthor:joanneRowling name:@"Harry Potter" publishedAt:[NSDate date]];
[moc RD_createTaskForProject:googleTalk priority:@3 members:nil];
[moc RD_createArticleAboutUser:alizar withName:@"Alizar - Habrahabr Soul" andTitle:@"Alizar"];

或寻找对象:

NSArray* mos = [moc RD_findUsersWithFirstName:@"Igori"];
NSManagedObject* mo = [moc RD_findUserWithLastName:@"Guliko" firstName:@"Igori"];
NSArray* mos = [moc RD_findBooksPublishedAt:[NSDate date]];
NSArray* mos = [moc RD_findFriendsLastSeenAt:[NSDate date]];
NSArray* mos = [moc RD_findBooksPublishedAfter:[NSDate date]];
NSArray* mos = [moc RD_findBooksPublishedBefore:[NSDate date]];
NSManagedObject* mo = [moc RD_findStudentCreatedBefore:[NSDate date] emailLike:@"*@gmail.com"];
NSArray* mos = [moc RD_findCompaniesRegisteredAfter:[NSDate date] limit:@10 offset:@1];
NSArray* mos = [moc RD_findClientsAddedBetween:@[startDate, endDate]];
NSArray* mos = [moc RD_findStudentsWithAgeBetween:@[@18, @28]]; // plural
NSManagedObject *mo = [moc RD_findStudentWithAgeBetween:@[@18, @28]]; // singular
NSArray* mos = [moc RD_findUsersWithGender:@[@"Male", @"Female"] lastNameLike:@"*ir*"  ageBetween:@[@18, @29]];
NSArray* mos = [moc RD_findCarsWithFuelVolumeGreaterThan:@10];
NSArray* mos = [moc RD_findMessagesWithPositiveVotesSmallerThan:@29];

但是如果不关闭 ARC,我就无法让它工作。(上一个Q:运行时编程动态方法时使用ARC编译时出错)。

从邮件列表:

我们的推理分为 50/50,(1)需要对类型和所有权更加小心,(2)希望消除语言中令人尴尬的缺陷(不允许用任何比警告)。确实没有正当理由调用甚至没有在某处声明的方法。这样做的能力使一些非常微不足道的错误(例如选择器中的拼写错误)运行时失败而不是编译失败。我们一直对此提出警告。修复你的代码。

那么,Objective-C 不再是真正的具有动态方法的 Objective-C 了吗?

现在是否可以在 RubyDavidson 中实现我想要的东西?

4

1 回答 1

-1

使用动态方法您必须解决两个问题:运行时的存在,这似乎已解决,以及编译器的存在。“否”是您问题的错误答案,因为您可以解决该问题。

有两种技术可以做到这一点:

A. 将它们归入接收者的类别。然后你有一个声明。用它。这称为非正式协议。它从一开始就用于 Cocoa。

B. 将它们放入协议中并使其成为可选的。然后你有一个声明。用它。这称为正式协议。

于 2013-10-13T10:08:52.023 回答