BaseTask 1.2.0

BaseTask 1.2.0

测试测试通过
Lang语言 SwiftSwift
许可证 MIT
发布最新发布2016年5月
SPM支持 SPM

Chris Stephan 维护。



BaseTask 1.2.0

  • Chris

BaseTask 是一套类,它使您能够轻松创建一个 web 服务的 API 客户端。它将样板代码简化到只需您与 API 交互所需的具体细节。

动机

在构建与 web 服务交互的应用程序时,我希望利用 Apple 在 iOS 7 和 OS X 10.9 中引入的现有的 NSURLSession 类。我还希望有一个可以子类化的东西,这样我就可以将不同的 web 资源请求封装在具体的类中,只添加它们的特定细节。

特性

  • 小巧的公共 API 界面
  • 与您自己的自定义对象一起使用
  • 可通过方法重写进行自定义
  • 有良好的文档
  • 已测试
  • 支持 Cocoapods/Carthage 集成

安装

展示代码

如果您的首选语言是 Swift

// UserTask.swift

import BaseTask

class PostTask: BaseTask {
  typealias Post = [String: AnyObject]
  typealias GetPostCompletionHandler = (Post?, NSURLResponse?, NSError?) -> Void
  typealias GetAllPostsCompletionHandler = ([Post]?, NSURLResponse?, NSError?) -> Void

  let baseURLString = "http://jsonplaceholder.typicode.com/posts"

  func getPost(id: String, completionHandler: GetPostCompletionHandler) -> NSURLSessionDataTask {
    let url = NSURL(string: "\(baseURLString)/\(id)")!

    return makeHTTPRequest(url,
      bodyDictionary: nil,
      httpMethod: .Get,
      httpHeaders: nil,
      bodyParser: nil,
      responseParsers: [JSONResponseParser()],
      completion: { (parsedObject, response, error) in
        let objectToReturn = parsedObject as? Post
        completionHandler(objectToReturn, response, error)
      }
    )
  }

  func getAllPosts(completionHandler: GetAllPostsCompletionHandler) -> NSURLSessionDataTask {
    let url = NSURL(string: baseURLString)!

    return makeHTTPRequest(url,
      bodyDictionary: nil,
      httpMethod: .Get,
      httpHeaders: nil,
      bodyParser: nil,
      responseParsers: [JSONResponseParser()],
      completion: { (parsedObject, response, error) in
        let objectToReturn = parsedObject as? [Post]
        completionHandler(objectToReturn, response, error)
    })
  }
}
// Elsewhere

let task = PostTask().getAllPosts() { posts, response, error in
  if let posts = posts where error == nil {
    // do something with posts
    print(posts)
  }
}

task.resume()

或者如果您更喜欢 Objective-C

// PostTask.h

@import BaseTask;

typedef NSDictionary<NSString *, id> Post;
typedef void (^GetAllPostsCallback)(NSArray<Post *> * _Nullable posts, NSURLResponse * _Nullable response, NSError * _Nullable error);

@interface PostTask : BaseTaskObjC

- (NSString *)baseURL;

- (void)getAllPostsWithCompletionHandler:(GetAllPostsCallback)completionHandler;

@end
// PostTask.m

#import "PostTask.h"

@implementation PostTask

- (NSString *)baseURL
{
    return @"http://jsonplaceholder.typicode.com/posts";
}

- (void)getAllPostsWithCompletionHandler:(GetAllPostsCallback)completionHandler
{
    NSURL *url = [NSURL URLWithString:[self baseURL]];

  return [self makeHTTPRequest:url
                bodyDictionary:nil
                    httpMethod:GET
                   httpHeaders:nil
                    bodyParser:nil
               responseParsers:@[[JSONResponseParser new]]
                dispatch_queue:nil
                    completion:completionHandler];
}

@end
// Elsewhere

NSURLSessionDataTask *task = [[PostTask new]
 getAllPostsWithCompletionHandler:^(NSArray<Post *> *posts, NSURLResponse *response, NSError *error) {
    if (!error && posts) {
      // do something with posts
        NSLog(@"%@", posts);
    }
}];

[task resume];