在SP08版本中,ODataSDK引入了基于块的完成处理程序API。新的API用于打开在线商店和调度执行请求。
在我们进入具体的API之前,让我们快速看看iOS中的块。简而言之,块是可以传递给方法的代码段,就像传递价值观。引用从https://developer.apple.com/library/ios/documentation/Cocoa/conceptional/ProgrammingWithObjectiveC/WorkingwithBlocks/WorkingwithBlocks.html:
"一个区块代表一个不同的工作单元,将可执行代码与从周围范围捕获的可选状态相结合。"
块最常见的用途之一是作为完成处理程序。如中所述https://developer.apple.com/library/ios/featuredarticles/Short\实用指南\u Blocks/,完成处理程序是回调,允许客户端在框架方法或函数完成其任务时执行某些操作任务。考虑一下需要在以后进行回调的函数。为了能够将块用作完成处理程序,必须将该块作为参数传递给函数,这样当它完成执行时,就可以简单地调用该块。块必须是函数的最后一个参数。
例如,下面是函数的声明:
–(void)someFunction:(int)paramOne and completion:(void(^)(NSString*blockParam))completionBlock;
下面是函数的实现:
-(void)someFunction:(int)paramOne and completion:(void(^)(NSString)*blockParam)completionBlock{
NSString*msg=@"使用块作为完成处理程序的示例。";
completionBlock(msg);
}
请考虑下面调用上述函数的代码:
[self som]功能:5和完成:^(NSString*blockParam){
//在这里定义块代码,因此只有在调用'someFunction'时,淘客公众号,定义了完成
//handler块。
NSString*finalString=[NSString stringWithFormat:@"%@Blocks make life easy.",blockParam];
NSLog(@"%@",finalString);
}];
打印出的最终字符串:
使用块作为完成处理程序的示例。积木让生活变得简单。
通过以上基础知识,让我们更仔细地看看商店开业时基于积木的API。打开存储的块API是:
-(void)openStore:(void(^)(idstore,NSError*error))completionBlock;
使用此API对openStore的调用如下:
SODataOnlineStore*onlineStore=[[SODataOnlineStore alloc]initWithURL:[NSURL URLWithString:self.endpointUrl]httpConversati公司onManager:self.logonHandler.httpConvManager];
[onlineStore openStore:^(idstore,NSError*error){
if(!错误)
{
[self getODataEntries];
}else{
NSLog(@"%@",错误。描述);
}
}];
如果存储是通过旧的基于委托的API打开的(如下所示),那么我们需要使用SODataOnlineStoreDelegates方法。正如您所看到的,人工智能核心,带有块的代码比使用委托的代码更简洁易读。
SODataOnlineStore*onlineStore=[[SODataOnlineStore alloc]initWithURL:[NSURL URLWithString:self.endpointUrl]httpConversati公司onManager:self.logonHandler.httpConvManager];
[在线存储设置在线存储电子公使:自我];
N错误*错误=零;
BOOL success=[onlineStore openStoreWithError:&error];
#pragma mark–SODataOnlineStoreDelegates
-(void)onlineStoreOpenFinished:(SODataOnlineStore*)store{
[self getODataEntries];
}
-(void)onlineStoreOpenFailed:(SODataOnlineStore*)store error:(NSError*)error{
NSLog(@"%@",错误。描述);
}
SDK还提供了基于完成块的网络请求API列表。(检查ODataOnlineStore.h头文件以获得完整列表)这些API特别消除了使用委托时需要的大量特定于应用程序的代码。例如,当我们使用SODataRequestDelegate方法时,在每个方法中,例如requestFinished:方法,行业云,不需要查询调用了哪种请求(创建、更新或删除)、查询的集合等。
下面是一个更新请求的示例,大数据怎么查询,带有完成处理程序块API和用于比较的委托API。基于块的代码比requestFinished:delegate方法简单得多,在继续处理结果之前,大数据的数据库,我们必须验证请求模式是否确实已更新。
基于块的更新请求:
[onlineStore scheduleUpd实体:实体选项:nil完成:^(idrequestExecution,N错误*错误){
如果(!错误)
NSLog(@"Update Successful");
}];
基于委托的更新请求:
[onlineStore scheduleUpd实体:实体委托:自我选项:无];
#pragma mark–SODataRequestDelegates
–(void)requestFinished:(id)requestExecution{
NSError*error=nil;
idrequestParam=requestExecution.request请求;
idrequest=(id)requestParam;
if([requestParam协议:@协议(SODataRequestParamSingle)])
{
如果(请求模式==SODataRequestModeUpdate)
{
如果(!错误)
NSLog(@"Update Successful");
}
}
基于上述示例,使用基于完成块的API有以下优点:
最后一点,但非常重要的一点-你可以选择在你的应用程序中使用委托或基于块的API,但不要混合使用这两种风格。
我希望这个博客提供了一个很好的介绍完成块的API,并帮助您利用它在您的下一个应用程序。
见你在下一个博客!