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 或者需要改進的地方, 還望海涵, 同時歡迎在下方留言~
不要吝嗇您那寶貴的??&★就好, 您的支持是我分享的動力~??