Как мне написать метод расширения для универсального типа с ограничениями на параметры типа?

Версия NSString (в отличие от Swift String) replacingCharacters(in: NSRange, with: NSString) принимает NSRange, поэтому одно простое решение - сначала конвертировать String в NSString. Названия делегатов и методов замены немного отличаются в Swift 3 и 2, поэтому в зависимости от того, какой Swift вы используете:

Swift 3.0

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

  let nsString = textField.text as NSString?
  let newString = nsString?.replacingCharacters(in: range, with: string)
}

Swift 2.x

func textField(textField: UITextField,
               shouldChangeCharactersInRange range: NSRange,
               replacementString string: String) -> Bool {

    let nsString = textField.text as NSString?
    let newString = nsString?.stringByReplacingCharactersInRange(range, withString: string)
}
15
задан Mark Cidade 8 February 2011 в 02:32
поделиться