1. 枚举(Enumerations)
枚举在 Objective-C 中用来定义一组相关的常量值。
1.1 定义枚举
使用 typedef NS_ENUM 定义枚举,推荐这种方式,因为它与 Foundation 框架更兼容。
typedef NS_ENUM(NSInteger, Weekday) {
WeekdayMonday = 0,
WeekdayTuesday,
WeekdayWednesday,
WeekdayThursday,
WeekdayFriday,
WeekdaySaturday,
WeekdaySunday
};
特点:
NS_ENUM定义的枚举类型明确类型为NSInteger。- 每个枚举值会自动递增,除非明确指定。
1.2 使用枚举
Weekday today = WeekdayWednesday;
if (today == WeekdayWednesday) {
NSLog(@"Today is Wednesday!");
}
1.3 遍历枚举
Objective-C 不直接支持枚举遍历,但可以通过数组辅助实现:
NSArray *weekdays = @[@"Monday", @"Tuesday", @"Wednesday", @"Thursday", @"Friday", @"Saturday", @"Sunday"];
Weekday today = WeekdayWednesday;
NSLog(@"Today is %@", weekdays[today]); // 输出: Today is Wednesday
2. 字典(NSDictionary 和 NSMutableDictionary)
2.1 不可变字典(NSDictionary)
NSDictionary 是一种键值对存储的集合,键必须是唯一的。
创建字典
NSDictionary *personInfo = @{
@"name": @"Lihongjun",
@"age": @30,
@"location": @"Zhejiang"
};
访问字典中的值
NSString *name = [personInfo objectForKey:@"name"];
NSLog(@"Name: %@", name); // 输出: Name: Lihongjun
简化写法:
NSString *location = personInfo[@"location"];
NSLog(@"Location: %@", location); // 输出: Location: Zhejiang
2.2 可变字典(NSMutableDictionary)
NSMutableDictionary 是 NSDictionary 的可变版本,可以动态添加或修改键值对。
创建可变字典
NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary];
[mutableDict setObject:@"Lihongjun" forKey:@"name"];
[mutableDict setObject:@30 forKey:@"age"];
NSLog(@"%@", mutableDict);
修改和删除键值对
[mutableDict setObject:@"Shanghai" forKey:@"location"]; // 添加或修改
[mutableDict removeObjectForKey:@"age"]; // 删除键值对
NSLog(@"%@", mutableDict);
2.3 遍历字典
可以使用 for-in 遍历字典的键和值。
NSDictionary *personInfo = @{
@"name": @"Lihongjun",
@"age": @30,
@"location": @"Zhejiang"
};
for (NSString *key in personInfo) {
NSLog(@"%@: %@", key, personInfo[key]);
}
或者使用 enumerateKeysAndObjectsUsingBlock 方法:
[personInfo enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
NSLog(@"%@: %@", key, obj);
}];
3. 集合类型(NSSet 和 NSMutableSet)
NSSet 是无序集合,不允许重复的元素。
3.1 不可变集合(NSSet)
NSSet *uniqueNumbers = [NSSet setWithObjects:@1, @2, @3, @4, nil];
if ([uniqueNumbers containsObject:@2]) {
NSLog(@"Set contains the number 2");
}
3.2 可变集合(NSMutableSet)
NSMutableSet 可以动态添加和移除元素。
NSMutableSet *mutableSet = [NSMutableSet set];
[mutableSet addObject:@1];
[mutableSet addObject:@2];
[mutableSet removeObject:@1];
NSLog(@"%@", mutableSet); // 输出: {2}
3.3 遍历集合
NSSet *set = [NSSet setWithObjects:@"A", @"B", @"C", nil];
for (NSString *element in set) {
NSLog(@"%@", element);
}
4. 数组(NSArray 和 NSMutableArray)
数组在 Objective-C 中是一种有序集合。
4.1 不可变数组(NSArray)
NSArray *array = @[@"Apple", @"Banana", @"Cherry"];
NSString *firstItem = array[0]; // 获取第一个元素
NSLog(@"%@", firstItem); // 输出: Apple
4.2 可变数组(NSMutableArray)
NSMutableArray *mutableArray = [NSMutableArray arrayWithArray:@[@"Apple", @"Banana"]];
[mutableArray addObject:@"Cherry"];
[mutableArray removeObject:@"Banana"];
NSLog(@"%@", mutableArray); // 输出: (Apple, Cherry)
4.3 遍历数组
NSArray *fruits = @[@"Apple", @"Banana", @"Cherry"];
for (NSString *fruit in fruits) {
NSLog(@"%@", fruit);
}
或者使用块:
[fruits enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"Item %lu: %@", (unsigned long)idx, obj);
}];
5. NSNumber(封装基本类型)
Objective-C 提供 NSNumber 类来封装基本数据类型为对象。
5.1 创建 NSNumber
NSNumber *intNumber = @42;
NSNumber *floatNumber = @3.14;
NSNumber *boolNumber = @YES;
5.2 解包 NSNumber
int intValue = [intNumber intValue];
float floatValue = [floatNumber floatValue];
BOOL boolValue = [boolNumber boolValue];
5.3 使用 NSNumber
- 存储在集合中(例如数组或字典)。
NSArray *numbers = @[@1, @2, @3];
NSDictionary *person = @{@"age": @30};