iOS汉字转拼音

13 篇文章 0 订阅

微信通讯录列表右侧字母表控件, 着实感觉功能强大, 查找好友只要轻轻一划, 就可以找到好友, 而无需从很长的列表划好几下, 更没必要从标签查找了. 

那么问题来了, 字母和姓氏怎么对应的呢? 系统是老外写的, 不可能像新华字典一样有个目录吧? 查找官方文档, 在CoreFoundation框架中找到了CString这个文件中的

CFStringTransform函数, 其实就这个函数就可以实现汉字转拼音的功能.

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

类方法:

iOSChineseToPinyin.h

@interface iOSChineseToPinyin : NSObject

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

@end</span>

iOSChineseToPinyin.m

@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</span>

NSString类别:

NSString+Pinyin.h

@interface NSString (Pinyin)

- (NSString *)getPinyin;

@end</span>

NSString+Pinyin.m

@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</span>

封装的好处就是方便调用嘛~

类方法调用:

#import "iOSChineseToPinyin.h"
NSString *chinese = @"好好学习,天天向上";
NSString *pinyin = [iOSChineseToPinyin getPinyin:chinese];
NSLog(@"Method: %@",pinyin);</span>
类别调用:

#import "NSString+Pinyin.h"
NSString *chinese = @"好好学习,天天向上";
NSLog(@"Category: %@", [chinese getPinyin]);</span>

源码下载

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值