typedef

171 阅读1分钟

iOS 当封装网络请求的时候你可能会遇到一个问题,在你的公共方法中需要传入block的时候应该怎么写,然后我就参考了一下AFNetworking,AFN的是直接把block写在参数里

- (nullable NSURLSessionDataTask *)POST:(NSString *)URLString
                             parameters:(nullable id)parameters
                               progress:(nullable void (^)(NSProgress *uploadProgress))uploadProgress
                                success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success
                                failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;

但是这样太冗余了,有没有简化的方法呢 ###typedef 关键字就能解决这个问题

typedef void(^uploadProgress)(NSProgress *uploadProgress);

typedef void(^success)(NSURLSessionTask *task, id responseObject);

typedef void(^failure)(NSURLSessionTask *task, NSError *error);

@property (nonatomic, copy) void(^managerBlock)(NSString *string);

- (NSURLSessionDataTask *)POST:(NSString *)URLString parameters:(id)dict progress:(uploadProgress)uploadProgress success:(success)success failure:(failure)failure;

但是typedef这个关键字是什么意思呢?

举个简单例子

   typedef NSString *myStr;
   myStr name = @"nameTest";
   NSLog(@"%@", name);

此时myStr就相当于NSString *,那我们就可以说typedef可以定义类型别名

mark:typedef只能改变类型名,不能更改对象名