MST

星途 面试题库

面试题:Objective-C中泛型的基本语法及轻量级泛型应用场景

请简述Objective-C中泛型的基本语法,比如如何声明一个泛型数组。并举例说明轻量级泛型在实际项目中的应用场景。
37.1万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试

1. Objective - C中泛型基本语法

在Objective - C中,泛型用于指定集合中对象的类型。

声明泛型数组

语法格式为:NSArray<SomeClass *> *array = @[];,这里SomeClass是你期望数组中包含的对象类型。例如,如果你有一个Person类,声明包含Person对象的数组可以这样写:

@interface Person : NSObject
@end

@implementation Person
@end

NSArray<Person *> *peopleArray = @[[[Person alloc] init], [[Person alloc] init]];

对于可变数组NSMutableArray,声明方式类似:NSMutableArray<SomeClass *> *mutableArray = [NSMutableArray array];

2. 轻量级泛型在实际项目中的应用场景

类型安全保障

在数据模型传递过程中,例如从网络请求获取数据并转化为模型对象。假设你有一个网络请求方法fetchUsers,它返回一个包含用户信息的数组。通过泛型可以明确数组内对象类型,避免运行时错误。

NSArray<User *> *users = [self fetchUsers];
for (User *user in users) {
    // 这里由于泛型,user明确是User类型,可直接调用User类的属性和方法
    NSLog(@"User name: %@", user.name); 
}

代码可读性提升

在一个处理多种图片加载的项目中,有一个图片加载类ImageLoader,它有一个方法loadImages返回加载的图片数组。使用泛型声明返回数组类型为UIImage,代码阅读者可以立刻知道返回值类型,而无需查看具体实现。

@interface ImageLoader : NSObject
- (NSArray<UIImage *> *)loadImages;
@end

@implementation ImageLoader
- (NSArray<UIImage *> *)loadImages {
    // 加载图片逻辑并返回数组
    NSMutableArray<UIImage *> *images = [NSMutableArray array];
    //...
    return images;
}
@end

集合类方法参数约束

在一个TableView的数据源管理类中,有一个方法configureCellsWithData:,用于根据数据配置表格单元格。通过泛型可以确保传入的数据类型是符合单元格配置要求的特定模型类型,提高代码健壮性。

@interface TableViewDataSourceManager : NSObject
- (void)configureCellsWithData:(NSArray<TableCellModel *> *)data;
@end

@implementation TableViewDataSourceManager
- (void)configureCellsWithData:(NSArray<TableCellModel *> *)data {
    // 配置单元格逻辑
}
@end