美文网首页
iOS 项目框架demo:独立开发项目的福音

iOS 项目框架demo:独立开发项目的福音

作者: 丶淡茗 | 来源:发表于2018-08-17 18:22 被阅读82次

前言

由于独立开发不少App,每次新接手一个项目,框架就需要重新搭建。然后开始了漫长的代码复制粘贴。说实在的每次时间浪费在这里是不能容忍的,然后就有了这个项目框架,项目已经放到GitHub上,欢迎广大网友进行拍砖(轻拍)或者有什么好的设计请Issues

GitHub地址https://github.com/wanghui9309/BaselineProject

项目介绍

AppDelegate

控制器的切换封装到了UIWindow+Extension分类里面,这样代码看起来很简洁,逻辑清楚

    //状态栏样式
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    // 初始化SDK
    [UIWindow initSDK];
    // 1、创建窗口
    self.window = [[UIWindow alloc] initWithFrame: [UIScreen mainScreen].bounds];
    // 3、显示窗口
    [self.window makeKeyAndVisible];
    // 2、设置根控制器
    [UIWindow switchRootViewController];
Category
Network

AFN简单的二次封装,这个有个遗留问题,每次取消网络请求都会取消全部,暂时不解决

/**
 发起请求
 
 @param requestType 请求类型
 @param urlStr url
 @param photos 图片数组
 @param parameters 参数
 @param success 请求成功的回调
 @param failure 请求失败的回调
 */
- (void)requestWithNetworkType:(NetworkRequestType)requestType
                       withUrl:(NSString *)urlStr
                        photos:(NSMutableArray<UIImage *> *)photos
                withParameters:(NSDictionary *)parameters
                       success:(void (^)(id responseObject))success
                       failure:(void (^)(NSError *error))failure
{
    BOOL isReachable = [[Reachability reachabilityForInternetConnection] isReachable];
    if (!isReachable)
    {
        if (failure)
        {
            dispatch_async(dispatch_get_main_queue(), ^{
                failure(nil);
            });
        }
        return;
    }
    
    [[WHNetworkActivityIndicator sharedActivityIndicator] startActivity];
    
    __weak typeof(self) weakSelf = self;
    //请求成功的回调
    void (^successBlock)(NSURLSessionTask *task, id responseObject) = ^(NSURLSessionTask *task, id responseObject){
        
        [weakSelf.operationTask removeObject:task];
        [[WHNetworkActivityIndicator sharedActivityIndicator] stopActivity];
        
        WHLog(@"%@", [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]);
        
        if (success)
        {
            dispatch_async(dispatch_get_main_queue(), ^{
                success(responseObject);
            });
        }
    };
    
    //请求失败的回调
    void (^failureBlock)(NSURLSessionTask *task, NSError *error) = ^(NSURLSessionTask *task, NSError *error){
        
        [weakSelf.operationTask removeObject:task];
        [[WHNetworkActivityIndicator sharedActivityIndicator] stopActivity];
        
        WHLog(@"%@", error);
        
        if (failure)
        {
            dispatch_async(dispatch_get_main_queue(), ^{
                failure(error);
            });
        }
    };
    
    //请求头
    switch (self.requestType)
    {
        case RequestSerializerType_Http:
            _sessionManager.requestSerializer = [AFHTTPRequestSerializer serializer];
            break;
            
        default:
            _sessionManager.requestSerializer = [AFJSONRequestSerializer serializer];
            break;
    }
    // 超时时间
    _sessionManager.requestSerializer.timeoutInterval = 15.0f;
    
    NSURLSessionTask *task = nil;
    switch (requestType)
    {
        case NetworkRequestType_GET:
        {
            task = [_sessionManager GET:urlStr parameters:parameters progress:nil success:successBlock failure:failureBlock];
        }
            break;
            
        case NetworkRequestType_POST:
        {
            task = [_sessionManager POST:urlStr parameters:parameters progress:nil success:successBlock failure:failureBlock];
        }
            break;
            
        case NetworkRequestType_FormData:
        {
            task = [_sessionManager POST:urlStr parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
                // 直接以 key value 的形式向 formData 中追加二进制数据
                for (NSString *key in parameters.allKeys)
                {
                    id data = parameters[key];
                    
                    if ([data isKindOfClass:NSString.class])
                    {
                        [formData appendPartWithFormData:[data dataUsingEncoding:NSUTF8StringEncoding] name:key];
                    }
                }
                
                [photos enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
                    if ([obj isKindOfClass:UIImage.class])
                    {
                        NSString *fileName = [NSString stringWithFormat:@"file_%lu.png", idx];
                        NSData *imageData = UIImageJPEGRepresentation(obj, 0.7);
                        
                        
                        [formData appendPartWithFileData:imageData name: @"file[]" fileName: fileName mimeType:@"image/png"];
                    }
                }];
                
            } progress:nil success:successBlock failure:failureBlock];
        }
            break;
            
        default:
            break;
    }
    [_operationTask addObject:task];
}

相关文章

网友评论

      本文标题:iOS 项目框架demo:独立开发项目的福音

      本文链接:https://www.haomeiwen.com/subject/zxutiftx.html