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? {
        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)

你可能感兴趣的:(Swift4 使用replacingCharacters)