swift中提供了這樣一個方法:
public func CFStringTransform(string: CFMutableString!, _ range: UnsafeMutablePointer<CFRange>, _ transform: CFString!, _ reverse: Bool) -> Bool
注釋的大意是轉(zhuǎn)換制定的字符串,并修改傳進(jìn)來的參數(shù),只有指定范圍內(nèi)被修改,范圍制定為空則整個字符串都被修改。如果轉(zhuǎn)型成功返回true,失敗返回false。
我們擴(kuò)展一個String類的方法:
extension String {
func transformToPinYin() -> String {
let mutableString = NSMutableString(string: self)
//把漢字轉(zhuǎn)為拼音
CFStringTransform(mutableString, nil, kCFStringTransformToLatin, false)
//去掉拼音的音標(biāo)
CFStringTransform(mutableString, nil, kCFStringTransformStripDiacritics, false)
let string = String(mutableString)
//去掉空格
return string.replacingOccurrences(of: " ", with: "")
}
}
實際中根據(jù)需求決定是否保留音標(biāo)和空格。
print("中國".transformToPinYin())
輸出結(jié)果:
zhongguo
zhong guo (保留空格)
zhōng guó (保留空格和音標(biāo))
漢字轉(zhuǎn)拼音比較消耗性能,在循環(huán)中務(wù)必小心使用。