Синтаксическая проблема с UIPickerView Swift 5 - PullRequest
0 голосов
/ 20 апреля 2019

Я исследовал различные способы создания UIPickerView и каждый раз сталкиваюсь с одними и теми же проблемами:

Я получаю сообщение об ошибке:

ТипtimeselectviewController не соответствует протоколу UIPickerViewDataSource

, а функция pickerView всегда получает предупреждение:

метод экземпляра 'pickerView (pickerView: titleForRow: forComponent :)'почти совпадает с необязательным требованием'

1 Ответ

0 голосов
/ 20 апреля 2019
  1. Относительно предупреждения «не соответствует протоколу», потому что протокол имеет определенные обязательные методы.Если вы нажмете на предупреждение, оно предложит вам добавить метод «заглушки»:

    enter image description here

    Если вы выберете опцию «исправить»,он добавит недостающие обязательные UIPickerViewDataSource методы делегата:

    enter image description here

    Вы, очевидно, должны написать код для этих методов,но он точно покажет, какие методы отсутствуют и что вам нужно делать.

    Обратите внимание, это numberOfComponents(in:), а не numberOfComponentsInPickerView(pickerView:).То, что у вас есть, похоже на старый синтаксис Swift 2.

  2. Относительно предупреждения «почти соответствует необязательному требованию»:

    Оба titleForRowи didSelectRow пропускают _ метку аргумента для первого параметра. Это, соответственно:

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { ... }
    

    и

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { ... }`
    

    Обратите внимание на метку аргумента _, как у вас для numberOfRowsInComponent.

    Всякий раз, когда вы видите подобное предупреждение, внимательно изучите документацию для рассматриваемого протокола (UIPickerViewDelegate в данном случае).

    Часто, если вы нажмете на предупреждение, это даже даст вам возможность сделать так, чтобы Xcode исправил сигнатуру метода для вас. Выберите опцию, которая говорит «... чтобы удовлетворитьэто требование », а не то, которое говорит« ... чтобы заставить замолчать это предупреждение »:

    satisfy this requirement

Нижняя строка, всякий раз, когдавы видите предупреждения о пропущенных требованиях к протоколу и / или предупреждения «почти совпадают», либо попробуйте исправитьPiler предлагает и / или перепроверить документацию к протоколу.

...