Почему Xcode не всегда отображает подсказку о значении параметра по умолчанию?

Есть ли какое-либо правило, когда Xcode отображает подсказку функции / метода со значением параметра по умолчанию?

Вот что я имею в виду. Например, в UIViewController есть present() метод с такой подписью:

func present(
    _ viewControllerToPresent: UIViewController,
    animated flag: Bool,
    completion: (() -> Void)? = nil
)

Когда я набираю его имя в Xcode, мне только намекают на полное объявление метода, включая completion параметр, который можно опустить:

  1. присутствует (viewControllerToPresent: UIViewController, анимированный: Bool, завершение: (() -> Void)?)

Тем не менее, давайте создадим present копия метода:

func presentCopy(
    _ viewControllerToPresent: UIViewController,
    animated flag: Bool,
    completion: (() -> Void)? = nil
) {...}

На этот раз Xcode сообщает о двух возможных версиях метода:

  1. presentCopy (viewControllerToPresent: UIViewController, анимированный: Bool)

  2. presentCopy (viewControllerToPresent: UIViewController, анимированный: Bool, завершение: (() -> Void)?)

Откуда это несоответствие?

1 ответ

Решение

Я думаю, это потому, что вы определяете метод в чистом классе Swift, тогда как present метод UIViewController определяется в классе Objective-C.

В Objective-C нет понятия значений параметров по умолчанию.

Даже обратное верно. Если вы получаете доступ к вашему presentCopy метод внутри класса Obj-C, объявление метода будет иметь все значения и будет только один метод.

Другие вопросы по тегам