Swift使用CFStringTransform实现汉字转拼音
2015-09-14 本文已影响3743人
lfb_CD
时间:2015.9.13.23
文章发布地址:http://www.jianshu.com/p/a6c000b65a93
作者 : lfb_CD 欢迎关注我的微博:http://weibo.com/lfbWb
首先CFStringTransform函数如下:
func CFStringTransform(string: CFMutableString!,
range: UnsafeMutablePointer<CFRange>,
transform: CFString!, reverse: Boolean
) -> Boolean
其中string
参数是要转换的字符串,比如要转换的中文,同时它是mutable的,因此也直接作为最终转换后的字符串。range
是要转换的范围,同时输出转换后改变的范围,如果为nil
,代表全部转换。transform
可以指定要进行什么样的转换,这里可以指定多种语言的拼写转换。reverse
指定该转换是否必须是可逆向转换的。
函数的返回值类型为Boolean
,不是Bool
类型,所以如果转换成功就返回1,否则返回0,而不是true
或者false
。
查看文档得知可进行转换的有下面这几种形式
let kCFStringTransformStripCombiningMarks: CFString! //删除重音符号
let kCFStringTransformToLatin: CFString! //中文的拉丁字母
let kCFStringTransformFullwidthHalfwidth: CFString!//全角半宽
let kCFStringTransformLatinKatakana: CFString!//片假名拉丁字母
let kCFStringTransformLatinHiragana: CFString!//平假名拉丁字母
let kCFStringTransformHiraganaKatakana: CFString!//平假名片假名
let kCFStringTransformMandarinLatin: CFString!//普通话拉丁字母
let kCFStringTransformLatinHangul: CFString!//韩文的拉丁字母
let kCFStringTransformLatinArabic: CFString!//阿拉伯语拉丁字母
let kCFStringTransformLatinHebrew: CFString!//希伯来语拉丁字母
let kCFStringTransformLatinThai: CFString!//泰国拉丁字母
let kCFStringTransformLatinCyrillic: CFString!//西里尔拉丁字母
let kCFStringTransformLatinGreek: CFString!//希腊拉丁字母
let kCFStringTransformToXMLHex: CFString!//转换为XML十六进制字符
let kCFStringTransformToUnicodeName: CFString!//转换为Unicode的名称
@availability(iOS, introduced=2.0)
let kCFStringTransformStripDiacritics: CFString!//转换成不带音标的符号
大家可以一个一个尝试一下。我只是根据函数名做了个简单推测,并没有全部尝试(毕竟少用)如果有错可以在评论里指出,我也会感激你。
接下来实现汉字转换为拼音:
如果要进行汉字到拼音的转换,我们只需要将transform设定为kCFStringTransformMandarinLatin
或者kCFStringTransformToLati
也可适用于非汉字字符串):
上面那个方法转换为带有声调的拼音,下面我们用kCFStringTransformStripDiacritics
得到不带音标的拼音
咦?怎么转换后还是中文啊!这也是我写代码时遇到的一个问题。。
在我快要放弃的时候终于找到了原因,原来
kCFStringTransformStripDiacritics
只是用来为我们去掉音标的所以,需要这么来用:
加上
kCFStringTransformToLatin
先转换为中文的拉丁字母,再去掉音标屏幕快照 2015-09-13 23.25.47.png