iOSSwiftSwift Dev

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也可适用于非汉字字符串):

屏幕快照 2015-09-13 23.50.42.png

上面那个方法转换为带有声调的拼音,下面我们用kCFStringTransformStripDiacritics得到不带音标的拼音

屏幕快照 2015-09-13 23.45.01.png
咦?怎么转换后还是中文啊!这也是我写代码时遇到的一个问题。。
在我快要放弃的时候终于找到了原因,原来kCFStringTransformStripDiacritics只是用来为我们去掉音标的
所以,需要这么来用:
加上kCFStringTransformToLatin先转换为中文的拉丁字母,再去掉音标
屏幕快照 2015-09-13 23.25.47.png
上一篇下一篇

猜你喜欢

热点阅读