iOS汉字转拼音

iOS汉字转拼音

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

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

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

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

1. 类方法:

iOSChineseToPinyin.h

#import <Foundation/Foundation.h>

@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 <Foundation/Foundation.h>

@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 <Foundation/Foundation.h>
#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 或者需要改进的地方, 还望海涵, 同时欢迎在下方留言~

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 网上找到的一些小知识,记录一下。 //获取拼音字母(传入汉字字符串, 返回大写拼音字母) - (NSString ...
    等待_人阅读 444评论 0 0
  • //获取拼音首字母(传入汉字字符串, 返回大写拼音首字母) (NSString *)firstCharactor:...
    爵笙彦阅读 691评论 0 0
  • Core Foundation包含文字转拼音的相应方法,而且还支持声调。具体过程如下: 首先假设有一段文字NSSt...
    FMengz阅读 566评论 0 2
  • //汉字转拼音 + (NSString *)transform:(NSString *)chinese{NSMut...
    Me小酥酥阅读 449评论 0 0
  • 最初认识成龙,是在看了他的电影,电影中的他诙谐幽默而又充满正义,最重要的是有一身的好功夫。我虽为女子,但自小喜欢中...
    夏末柒雨阅读 537评论 0 0