Swift4 使用replacingCharacters

以使用UITextFieldDelegate为例

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        、、、
        return true
    }

在字符串发生改变的时候我需要提前知道改变后的内容

所以需要使用

replacingCharacters(in: <#RangeExpression#>, with: <#StringProtocol#>)

第二个参数需要遵守StringProtocol协议,String类型就可以

第一个参数需要遵守RangeExpression协议,NSRange不符合,需要使用Range。对String进行扩展

extension String {
    func toRange(_ range: NSRange) -> Range<String.Index>? {
        guard let from16 = utf16.index(utf16.startIndex, offsetBy: range.location, limitedBy: utf16.endIndex) else { return nil }
        guard let to16 = utf16.index(from16, offsetBy: range.length, limitedBy: utf16.endIndex) else { return nil }
        guard let from = String.Index(from16, within: self) else { return nil }
        guard let to = String.Index(to16, within: self) else { return nil }
        return from ..< to
    }
}

在代理中使用:

var toBeStr = textField.text
let rag = toBeStr?.toRange(range)
toBeStr = toBeStr?.replacingCharacters(in: rag!, with: string)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一.代码设置UITextFiled (1) //初始化textfield并设置位置及大小 UITextField*...
    myfachen阅读 1,981评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,837评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,740评论 18 399
  • 早已废弃多年的医院病房中 绿发少女轻抚着心爱之人的墨色发丝 异瞳中盛开的血莲昭示着她内心的疯狂 病床旁有些老旧的机...
    伊丽莎薰云阅读 165评论 1 1
  • 昨晚看了《梦想的声音》林俊杰对歌曲“至少还有你”的精彩诠释,对于一个虽不追星但却爱唱歌的人来说是一场视觉和听觉上的...
    爱好学习的小小培训师阅读 348评论 0 0