在 Swift 和 Objective-C 中,响应处理的具体区别主要体现在类型安全、错误处理和代码简洁性方面。下面通过代码示例详细说明这两种语言的响应处理方式。
import Moya
// 定义 User 模型
struct User: Decodable {
let id: Int
let name: String
}
// 使用 Moya 发起请求
let provider = MoyaProvider<MyService>()
provider.request(.getUser(id: 1)) { result in
switch result {
case .success(let response):
do {
// 使用 JSONDecoder 进行解码
let user = try JSONDecoder().decode(User.self, from: response.data)
print("Fetched user: \(user)")
} catch {
// 错误处理
print("Decoding error: \(error.localizedDescription)")
}
case .failure(let error):
// 网络请求失败
print("Error: \(error.localizedDescription)")
}
}
#import <AFNetworking/AFNetworking.h>
// 定义 User 模型
@interface User : NSObject
@property (nonatomic, assign) NSInteger id;
@property (nonatomic, copy) NSString *name;
@end
@implementation User
@end
// 使用 AFNetworking 发起请求
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager GET:@"https://api.example.com/user/1" parameters:nil headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
// 手动解析响应
NSError *error = nil;
NSData *data = [NSJSONSerialization dataWithJSONObject:responseObject options:0 error:&error];
if (!error) {
User *user = [[User alloc] init];
NSDictionary *dict = (NSDictionary *)responseObject;
user.id = [dict[@"id"] integerValue];
user.name = dict[@"name"];
NSLog(@"Fetched user: %@", user.name);
} else {
NSLog(@"Decoding error: %@", error.localizedDescription);
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
// 网络请求失败
NSLog(@"Error: %@", error.localizedDescription);
}];
在响应处理方面,Swift 利用类型系统和错误处理机制提供了更安全和简洁的方式,而 Objective-C 则需要更多的手动操作和额外的错误处理,增加了出错的风险。