iOS获取汉字拼音首字母的方法
2016-07-13 15:44
447 查看
iOS获取汉字拼音首字母的方法
之前在项目中需要根据昵称的首字母进行排序,蹚了几个坑,今天记录一下。 其实iOS系统封装的就有获取汉字首字母的方法,但不推荐,想看最优解的同学直接略过:
var name = "中国"; let cfName:CFMutableString = CFStringCreateMutableCopy(nil, 0, name); let success = CFStringTransform(cfName, nil, kCFStringTransformMandarinLatin, false); if (success) { print(cfName); } /// public func CFStringTransform(string: CFMutableString!, _ range: UnsafeMutablePointer<CFRange>, _ transform: CFString!, _ reverse: Bool) -> Bool /// 系统的翻译方法 range传nil 则翻译整个字符串,返回true证明翻译成功 /* transform 的可选值,这里选kCFStringTransformMandarinLatin 汉字转拼音 public let kCFStringTransformStripCombiningMarks: CFString! public let kCFStringTransformToLatin: CFString! public let kCFStringTransformFullwidthHalfwidth: CFString! public let kCFStringTransformLatinKatakana: CFString! public let kCFStringTransformLatinHiragana: CFString! public let kCFStringTransformHiraganaKatakana: CFString! public let kCFStringTransformMandarinLatin: CFString! public let kCFStringTransformLatinHangul: CFString! public let kCFStringTransformLatinArabic: CFString! public let kCFStringTransformLatinHebrew: CFString! public let kCFStringTransformLatinThai: CFString! public let kCFStringTransformLatinCyrillic: CFString! public let kCFStringTransformLatinGreek: CFString! public let kCFStringTransformToXMLHex: CFString! public let kCFStringTransformToUnicodeName: CFString! @available(iOS 2.0, *) public let kCFStringTransformStripDiacritics: CFString! */
执行以上代码输出:
"zhōng guó\n"
发现这并不是我们想要的东西,因为有类似声调的东西,如果是“暗夜”,就会得出“àn yè\n”,我们不能把所有声调的都算进“a”这个分组里。所以还需要下面一步把声调去掉:
let state = CFStringTransform(cfName, nil, kCFStringTransformStripDiacritics, Bool(0)); if (state) { print(cfName); } ///kCFStringTransformStripDiacritics 去除音调
通过以上两步,我们拿到了汉字的拼音字母“zhong guo\n”。
但是当我把这个方法使用到项目中的时候,我发现在我进入我的好友列表时,慢的要死,刚开始一直还以为是网络的原因,可是排查排查排查,终于发现原来是这个方法捣的鬼,也就是说这个方式会有很严重的效率问题,具体到什么地步,就以“中国”这一个词为例,耗费了 0.2秒左右的时间!!!一个词0.2秒,动则几百条的通讯录或者好友列表,要花费的时间就太恐怖了。
没办法,这个方法只能舍弃,虽然写法上只用了两行,但效率上的问题实在是不能直视。
于是改用了另外一种写法,添加pinyin.c、pinyin.m到项目,然后就可以放肆的获取拼音首字母了,不会有任何的效率问题,使用方法:
NSString *hanyu = @"中国共产党万岁!"; for (int i = 0; i < [hanyu length]; i++) { printf("%c", pinyinFirstLetter([hanyu characterAtIndex:i])); }
pinyin.c、pinyin.m下载地址
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 讲解iOS开发中基本的定位功能实现
- iOS中定位当前位置坐标及转换为火星坐标的方法
- js判断客户端是iOS还是Android等移动终端的方法
- iOS应用开发中AFNetworking库的常用HTTP操作方法小结
- iOS应用中UISearchDisplayController搜索效果的用法
- iOS App开发中的UISegmentedControl分段组件用法总结
- IOS开发环境windows化攻略
- iOS应用中UITableView左滑自定义选项及批量删除的实现
- iOS中UIAlertView警告框组件的使用教程
- 浅析iOS应用开发中线程间的通信与线程安全问题
- iOS中的UIKeyboard键盘视图使用方法小结
- 检测iOS设备是否越狱的方法
- .net平台推送ios消息的实现方法