Objective-C 学习笔记 | 范畴

Objective-C 学习笔记 | 范畴

Objective-C 学习笔记 | 范畴

通过使用范畴(Category),程序员可以为任何已有的类添加方法。

创建一个 Objective-C category,新范畴命名为 BNRVowelCounting,对应的类为 NSString。打开 NSString+BNRVowelCounting.h,为范畴声明一个方法,该方法会加入 NSString 类,代码如下所示:

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface NSString (BNRVowelCounting)

- (int)bnr_vowelCount;

@end

NS_ASSUME_NONNULL_END

在 NSString+BNRVowelCounting.m 中实现相应的方法:

#import "NSString+BNRVowelCounting.h"

@implementation NSString (BNRVowelCounting)

- (int)bnr_vowelCount
{
    NSCharacterSet *charSet = [NSCharacterSet characterSetWithCharactersInString:@"aeiouAEIOU"];
    int count = 0;
    for (int i = 0; i < [self length]; i++)
    {
        unichar c = [self characterAtIndex:i];
        if ([charSet characterIsMember:c])
            count++;
    }
    return count;
}

@end

在 main.m 中使用新创建的 NSString 方法:

#import <Foundation/Foundation.h>
#import "NSString+BNRVowelCounting.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSString *str = @"Hello, world!";
        NSLog(@"\"%@\" has %d vowels", str, [str bnr_vowelCount]);
    }
    return 0;
}

应该使用范畴来给已经存在的类增加新方法,而不要在范畴中替换已经存在的方法,这种情况下应该创建该类的子类,override 其方法。

相关推荐

  1. Objective-C 学习笔记 | 范畴

    2024-06-12 07:30:02       28 阅读
  2. Objective-C学习笔记(ARC,分类,延展)4.10

    2024-06-12 07:30:02       41 阅读
  3. Objective-C学习笔记(内存管理、property参数)4.9

    2024-06-12 07:30:02       28 阅读
  4. Objective-C学习笔记(@property,id,instancetype)4.9

    2024-06-12 07:30:02       33 阅读
  5. Objective-C学习笔记(基本语法)4.6

    2024-06-12 07:30:02       37 阅读
  6. Objective-C学习笔记(NSDictionary,NSFileManager,Copy)4.11

    2024-06-12 07:30:02       34 阅读
  7. Objective-C学习计划

    2024-06-12 07:30:02       30 阅读
  8. Object-c初步学习

    2024-06-12 07:30:02       53 阅读
  9. Object-c初步学习

    2024-06-12 07:30:02       53 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-12 07:30:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-12 07:30:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-12 07:30:02       82 阅读
  4. Python语言-面向对象

    2024-06-12 07:30:02       91 阅读

热门阅读

  1. python3按列表元素中字典的value排序

    2024-06-12 07:30:02       26 阅读
  2. 深度搜索 copilot 插件

    2024-06-12 07:30:02       33 阅读
  3. 达梦数据库忘记dba密码如何修改密码

    2024-06-12 07:30:02       28 阅读
  4. Docker面试整理-Docker Swarm是什么?

    2024-06-12 07:30:02       29 阅读
  5. Django模板标签CSRF

    2024-06-12 07:30:02       31 阅读
  6. Oracle基本数据类型

    2024-06-12 07:30:02       32 阅读
  7. Oracle系统视图归纳总结及常用对象查询语句

    2024-06-12 07:30:02       32 阅读
  8. GIS之arcgis系列08:arcpy实现批量excel转矢量点

    2024-06-12 07:30:02       32 阅读