我能想到的更好的解决方案是这样的:
ErrorCase.h
typedef NS_ENUM(NSInteger, ErrorCaseType) {
ErrorCaseTypeInvalidURL,
ErrorCaseTypeJSONStringConversionError,
ErrorCaseTypeJSONStringifyError,
ErrorCaseTypeHashArrayCastError
};
@interface ErrorCase : NSObject
@property (readonly, assign) ErrorCaseType errorType;
@property (readonly, assign) NSString *URL;
@property (readonly, assign) NSString *jsonString;
@property (readonly, assign) id data;
@property (readonly, assign) id hashArray;
+ (instancetype) InvalidURL:(NSString *)URL;
+ (instancetype) JSONStringConversionError:(NSString *)jsonString;
+ (instancetype) JSONStringifyError:(id)data;
+ (instancetype) HashArrayCastError:(id)hashArray;
@end
和
ErrorCase.m
@interface ErrorCase ()
@property (readwrite, assign) ErrorCaseType errorType;
@property (readwrite, assign) NSString *URL;
@property (readwrite, assign) NSString *jsonString;
@property (readwrite, assign) id data;
@property (readwrite, assign) id hashArray;
@end
@implementation ErrorCase
+ (instancetype) InvalidURL:(NSString *)URL {
ErrorCase *error = [[ErrorCase alloc] init];
error.URL = URL;
error.errorType = ErrorCaseTypeInvalidURL;
return error;
}
+ (instancetype) JSONStringConversionError:(NSString *)jsonString {
ErrorCase *error = [[ErrorCase alloc] init];
error.jsonString = jsonString;
error.errorType = ErrorCaseTypeJSONStringConversionError;
return error;
}
+ (instancetype) JSONStringifyError:(id)data {
ErrorCase *error = [[ErrorCase alloc] init];
error.data = data;
error.errorType = ErrorCaseTypeJSONStringifyError;
return error;
}
+ (instancetype) HashArrayCastError:(id)hashArray {
ErrorCase *error = [[ErrorCase alloc] init];
error.hashArray = hashArray;
error.errorType = ErrorCaseTypeHashArrayCastError;
return error;
}
@end
你可以这样使用它
ErrorCase *errorCase = [ErrorCase InvalidURL:@"https://example.com"];
switch (errorCase.errorType) {
case ErrorCaseTypeInvalidURL: NSLog(@"Invalid URL %@", errorCase.URL); break;
case ErrorCaseTypeJSONStringConversionError: NSLog(@"Conversion Error %@", errorCase.jsonString); break;
case ErrorCaseTypeJSONStringifyError: NSLog(@"Stringify Error %@", errorCase.data); break;
case ErrorCaseTypeHashArrayCastError: NSLog(@"Cast Error %@", errorCase.hashArray); break;
}