iOS汉字转拼音

iOS汉字转拼音

微信通讯录列表右侧的字母表控件, 想必大家每天都在使用, 其功能着实感觉强大, 查找好友只需要轻轻一划, 就可以根据姓氏首字母找到好友, 而无需从很长的列表划好几下, 更没必要从标签查找了. 这种便捷想必大家每天都在收益.

那么问题来了, 字母和姓氏怎么一一对应的呢?系统是老外写的,不可能像新华字典那样对每个汉字都有个目录吧?

终于功夫不负有心人, 查找官方文档, 在CoreFoundation框架的CFString.h文件中找到了CFStringTransform函数,其实这个函数就可以实现汉字转拼音的功能.

在此我分别封装了一个类方法和一个NSString的类别方法:

1. 类方法:

iOSChineseToPinyin.h

#import 

@interface iOSChineseToPinyin : NSObject

+ (NSString *)getPinyin:(NSString *)chinese;

@end

iOSChineseToPinyin.m

#import "iOSChineseToPinyin.h"

@implementation iOSChineseToPinyin

+ (NSString *)getPinyin:(NSString *)chinese {
    NSMutableString *mutableString = [NSMutableString stringWithString:chinese];
    // Boolean CFStringTransform(CFMutableStringRef string, CFRange *range, CFStringRef transform, Boolean reverse);
    CFStringTransform((CFMutableStringRef)mutableString, NULL, kCFStringTransformToLatin, false); // 汉字转成拼音(不知道为什么英文是拉丁语的意思)
    CFStringTransform((CFMutableStringRef)mutableString, NULL, kCFStringTransformStripDiacritics, false); // 去掉音调
    return mutableString;
}

@end

2. 类别方法:

NSString+Pinyin.h

#import 

@interface NSString (Pinyin)

- (NSString *)getPinyin;

@end

NSString+Pinyin.m

#import "NSString+Pinyin.h"

@implementation NSString (Pinyin)

- (NSString *)getPinyin {
    NSMutableString *mutableString = [NSMutableString stringWithString:self];
    // Boolean CFStringTransform(CFMutableStringRef string, CFRange *range, CFStringRef transform, Boolean reverse);
    CFStringTransform((CFMutableStringRef)mutableString, NULL, kCFStringTransformToLatin, false); // 汉字转成拼音(不知道为什么英文是拉丁语的意思)
    CFStringTransform((CFMutableStringRef)mutableString, NULL, kCFStringTransformStripDiacritics, false); // 去掉音调
    return mutableString;
}

@end

封装的好处就是方便调用嘛~
下面给出一个小小的Example:

#import 
#import "iOSChineseToPinyin.h"
#import "NSString+Pinyin.h"


int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        NSString *chinese = @"好好学习,天天向上!";
        
        // 类方法调用
        NSString *pinyin = [iOSChineseToPinyin getPinyin:chinese];
        NSLog(@"Method: %@",pinyin);
        
        // 类别调用
        NSLog(@"Category: %@", [chinese getPinyin]);
        
        
    }
    return 0;
}

Result:

汉字转拼音运行结果

代码直接拿去吧!


如果代码中有什么 bug 或者需要改进的地方, 还望海涵, 同时欢迎在下方留言~

不要吝啬您那宝贵的♥︎&★就好, 您的支持是我分享的动力~

你可能感兴趣的:(iOS汉字转拼音)