Objective-C

251 阅读2分钟

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)

NSMutableDictionaryNSDictionary 的可变版本,可以动态添加或修改键值对。

创建可变字典

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};