Sequencer 1.0.1

Sequencer 1.0.1

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最后发布2014年12月

未知的维护。



Sequencer 1.0.1

  • berzniz

Sequencer是一个用于异步流程控制的iOS库。

Sequencer将复杂的嵌套块逻辑转换为干净、直接且易于阅读的代码。

直接看代码

让我们将一些字符串输出到日志控制台

Sequencer *sequencer = [[Sequencer alloc] init];
[sequencer enqueueStep:^(id result, SequencerCompletion completion) {
    NSLog(@"This is the first step");
    completion(nil);
}];
[sequencer enqueueStep:^(id result, SequencerCompletion completion) {
    NSLog(@"This is another step");
    completion(nil);
}];
[sequencer enqueueStep:^(id result, SequencerCompletion completion) {
    NSLog(@"This step is going to do some async work...");
    int64_t delayInSeconds = 2.0;
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
        NSLog(@"finished the async work.");
        completion(nil);
    });
}];
[sequencer enqueueStep:^(id result, SequencerCompletion completion) {
    NSLog(@"This is the last step");
    completion(nil);
}];
[sequencer run];

上面的代码做了什么?

  1. 创建了一个Sequencer。不需要保留或持有它。请相信我。
  2. 四个步骤被排入Sequencer。第三步是异步的,但其余的都是常规同步代码。
  3. 每个步骤通过调用带有result对象的completion()来完成。这个结果会被发送到下一个步骤(在我们的例子中,结果是nil)。
  4. 我们运行了Sequencer。

注意:只需要通过移除对completion(nil)的调用来分离步骤。所有东西都将被自动清理。

更好的例子

让我们做一些更有用的事情。

我们将调用app.net API获取最新动态,读取最后一个动态的URL,并读取该URL的HTML内容。

(使用AFNetworking进行所有网络操作)

Sequencer *sequencer = [[Sequencer alloc] init];
[sequencer enqueueStep:^(id result, SequencerCompletion completion) {
    NSURL *url = [NSURL URLWithString:@"https://alpha-api.app.net/stream/0/posts/stream/global"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
        completion(JSON);
    } failure:nil];
    [operation start];
}];
[sequencer enqueueStep:^(NSDictionary *feed, SequencerCompletion completion) {
    NSArray *data = [feed objectForKey:@"data"];
    NSDictionary *lastFeedItem = [data lastObject];
    NSString *cononicalURL = [lastFeedItem objectForKey:@"canonical_url"];

    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:cononicalURL]];
    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
        completion(responseObject);
    } failure:nil];
    [operation start];
}];
[sequencer enqueueStep:^(NSData *htmlData, SequencerCompletion completion) {
    NSString *html = [[NSString alloc] initWithData:htmlData encoding:NSUTF8StringEncoding];
    NSLog(@"HTML Page: %@", html);
    completion(nil);
}];
[sequencer run];
  1. 第一步下载一个JSON对象,将其转换为NSDictionary并发送到下一步。
  2. 第二步读取canoniclURL,下载它并发送到下一步。
  3. 最后一步将数据转换为字符串并输出。

许可证

Sequencer遵循MIT许可证

版权所有(c) 2013 Tal Bereznitskey

任何获得本软件及其相关文档文件(“软件”)副本的人,在此免费许可使用该软件,不受任何限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售副 本的权利,以及允许获得软件的人这样做,前提是按照以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

该软件“按原样”提供,不提供任何形式的保证,明示或暗示,包括但不限于适销性、适用于特定目的和无侵犯性的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论源于合同、侵权或其他行为,源于、涉及或与该软件或该软件的使用或其他交易相关。

联系方式

在 GitHub 上找到我:Tal Bereznitskey

在 Twitter 上关注我:@ketacode