美文网首页
[转载]Swift5中CFStringTransform的使用

[转载]Swift5中CFStringTransform的使用

作者: 雾霾下的天空 | 来源:发表于2021-02-19 18:33 被阅读0次

    参考自原文 https://www.dazhuanlan.com/2020/03/11/5e6825c7056da/
    原文参考自 https://nshipster.com/cfstringtransform/

    名称按照字母排序,名称可能为数字、纯中文、纯英文、纯日文、或者各种语言的混合。
    在Swift中可以使用Core Foundation下的CFStringTransform方法转换。

        /// 转换字符串
        /// - Parameter string: 要转的字符串,需是CFMutableString类型
        /// - Parameter range: 要转换的区间。全部转换可传入 nil
        /// - Parameter transform: 要应用的变换
        /// - Parameter reverse: 是否要反转
        public func (_ string: CFMutableString!, _ range: UnsafeMutablePointer<CFRange>!, _ transform: CFString!, _ reverse: Bool) -> Bool
    
    extension String {
        /// 将任一字符串转换为英文字母字符串
        var pinyin: String {
            let mutableString = NSMutableString(string: self)
            
            // 应用 kCFStringTransformToLatin 变换将所有非英文文本转换为拉丁字母表示, 小写不带音标。
            CFStringTransform(mutableString, nil, "Any-Latin; Latin-ASCII; Any-Lower" as CFString, false)
                    
            // 分词去掉空格
            let tokenizer = CFStringTokenizerCreate(nil, mutableString, CFRangeMake(0, CFStringGetLength(mutableString)), 0, CFLocaleCopyCurrent())
            var mutableTokens: [String] = []
            var type: CFStringTokenizerTokenType
            repeat {
                type = CFStringTokenizerAdvanceToNextToken(tokenizer)
                let range = CFStringTokenizerGetCurrentTokenRange(tokenizer)
                let token = CFStringCreateWithSubstring(nil, mutableString, range) as NSString
                mutableTokens.append(token as String)
            } while type != []
            //生成最终字符串
            let joined = mutableTokens.joined()
            return joined.replacingOccurrences(of: "'", with: "")
        }
    }
    
    

    相关文章

      网友评论

          本文标题:[转载]Swift5中CFStringTransform的使用

          本文链接:https://www.haomeiwen.com/subject/jzvaxltx.html