Используя значение по умолчанию при вызывании функции

Swift 4,

Я написал расширение UITextView в swift 4, чтобы сделать код многоразовым. Также отлично работает с копировальной пастой.

    private var maxLengths = [UITextView: Int]()

extension UITextView : UITextViewDelegate {

  @IBInspectable var maxLength: Int {

    get {

      guard let length = maxLengths[self]
        else {
          return Int.max
      }
      return length
    }
    set {
      maxLengths[self] = newValue
      self.delegate = self
    }
  }

  @objc func limitLength(textView: UITextView) {
    guard let prospectiveText = textView.text,
      prospectiveText.count > maxLength
      else {
        return
    }

    let selection = selectedTextRange
    let maxCharIndex = prospectiveText.index(prospectiveText.startIndex, offsetBy: maxLength)
    text = String(prospectiveText[.. Bool {
    scrollToBottom()
    return true
  }

  public func textViewShouldEndEditing(_ textView: UITextView) -> Bool {
    scrollToBottom()
    return true
  }

  func scrollToBottom() {
    let location = text.count - 1
    let bottom = NSMakeRange(location, 1)
    self.scrollRangeToVisible(bottom)
  }

}

Установите значение максимальной длины в раскадровке,

enter image description here

14
задан Mat 5 May 2013 в 04:10
поделиться

4 ответа

Вы не можете сделать это, используя чистый PHP. Вы можете попробовать что-то вроде:

function test($var1 = null, $var2 = null){
    if($var1 == null) $var1 = 'default1';
    if($var2 == null) $var2 = 'default2';
}

, а затем вызвать свою функцию с null в качестве идентификатора переменной по умолчанию. Вы также можете использовать массив со значениями по умолчанию, что будет проще с большим списком параметров.

Еще лучше попытаться избежать всего этого и немного пересмотреть свой дизайн.

10
ответ дан 1 December 2019 в 07:12
поделиться

Параметры со значениями по умолчанию должны быть последними после других в PHP, а все остальные до этого момента должны быть заполнены при вызове функции. Я не знаю, как передать значение, которое запускает значение по умолчанию.

2
ответ дан 1 December 2019 в 07:12
поделиться

Обычно в таких ситуациях я указываю параметры в виде массива вместо. Взгляните на следующий пример (непроверенный):

<?php
test(array('t3' => 'something'));

function test($options = array())
{
  $default_options = array('t1' => 'test1', 't2' => 'test2', 't3' => 'test3');
  $options = array_merge($default_options, $options);

  echo $options['t1'] . ', ' . $options['t2'] . ', ' . $options['t3'];
}
?>
1
ответ дан 1 December 2019 в 07:12
поделиться

Использовать массивы:

function test($options = array()) {
    $defaults = array(
        't1' => 'test1',
        't2' => 'test2',
        't3' => 'test3',
    );
    $options = array_merge($defauts, $options);
    extract($options);
    echo "$t1, $t2, $t3";
}

Вызов функции следующим образом:

test(array('t3' => 'hi, i am different'));
25
ответ дан 1 December 2019 в 07:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: