iOS中获取UITextField文本时如何将波斯数字转换为英文数字?
解决iOS TextField主动获取时转换波斯数字为英文数字的方案
完全理解你的顾虑——实时监听文本变化频繁触发转换确实没必要,反而可能带来性能损耗。这里有个优雅的方案,只在你主动获取文本的时候才执行转换:
方案:给UITextField添加扩展,自定义计算属性
我们可以给UITextField写个扩展,新增一个计算属性,每次访问这个属性时才调用你已有的转换方法。这样只有当你主动去拿转换后的文本时,逻辑才会执行,完全避开实时监听的问题。
示例代码如下:
extension UITextField { // 自定义属性,每次访问时才执行转换 var convertedEnglishText: String? { guard let originalText = self.text else { return nil } // 替换成你已经实现的波斯文本转英文文本的方法 return yourPersianToEnglishConversionMethod(text: originalText) } }
使用方式
之后你需要获取转换后的文本时,直接调用这个自定义属性就行:
// 获取转换后的英文数字文本 if let englishText = mytextfield.convertedEnglishText { // 处理英文文本 print(englishText) // 输出 "1234" }
额外补充:如果只是转换波斯数字的简化方法
如果你的转换需求仅针对波斯数字,也可以直接用字符串映射的方式实现转换逻辑(不用额外依赖已有方法):
func convertPersianDigitsToEnglish(_ text: String) -> String { let digitMapping: [Character: Character] = [ "۰": "0", "۱": "1", "۲": "2", "۳": "3", "۴": "4", "۵": "5", "۶": "6", "۷": "7", "۸": "8", "۹": "9" ] return String(text.map { digitMapping[$0] ?? $0 }) }
把这个方法放到上面的扩展里替换掉yourPersianToEnglishConversionMethod即可。
这种方式既保持了代码的整洁性,又完美实现了"仅主动获取时转换"的需求,完全不会影响用户输入时的性能。
内容的提问来源于stack exchange,提问作者Fattaneh Talebi
相关产品推荐
相关产品推荐

