以使用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)