2015-01-27 3 views
3
  • Я новичок в Swift, мой вопрос в том, где мы используем и нуждаемся в внешнем параметре?
+0

http://www.apeth.com/swiftBook/ch02.html#_external_parameter_names – matt

ответ

6

В руководстве Language Swift в Apple:

Иногда полезно имя каждого параметра при вызове функции, указать цель каждого аргумента вы передаете функции.

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

Таким образом, вы не нуждаетесь в имени внешнего параметра, но использовать их полезно, потому что они служат документацией о параметрах в точке, вызываемой методом.

Например, без использования внешних имен параметров, вы можете определить способ присоединиться к так:

func join(_ s1: String,_ s2: String,_ joiner: String) -> String { 
    return s1 + joiner + s2 
} 

, который будет называться так:

join("foo", "bar", ", ") 

Как вы можете видеть, каждый значение параметра не очень понятно. Использование внешних имен параметров, можно определить тот же метод, как показано ниже:

func join(string s1: String, toString s2: String, withJoiner joiner: String) -> String { 
    return s1 + joiner + s2 
} 

который затем заставить пользователей назвать это так:

join(string: "foo", toString: "bar", withJoiner: ", ") 

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

Это может показаться не столь важным в этом простом примере, но при определении методов, которые принимают множество параметров с не столь очевидными значениями, использование внешних имен параметров сделает ваш код намного понятнее.

Обновление для Swift 3:

Это стало еще более значимым с введением Swift 3. Рассмотрим append(contentsOf:) метод класса Array, в Swift 3:

Не имея разные внутренние и внешние имена параметров в этом случае заставили бы нас заменить ярлык contentsOf на что-то вроде string на сайте вызова, которое не считалось бы столь же хорошим, как и предыдущее. Рекомендации Swift 3 API основаны на использовании разных внутренних и внешних имен параметров для создания четких и сжатых методов.

+0

'функция FUNC (имя: String, возраст: Int) -> Пустота { // ..... } функция («Джек», 20) // Вызывает ошибку Функция («Джек», возраст: 30) // Правильный путь «Даже без использования внешних параметров компилятор заставляет меня писать возраст: 30 при вызове функции. Итак, зачем нам нужны внешние параметры? –

+0

Потому что вы можете захотеть иметь внешнее имя параметра для первого параметра или другое внешнее имя, кроме того, которое автоматически присваивается Swift для второго параметра и тех, которые появляются после этого. –

+0

Цитата из раздела «Локальные и внешние параметры имен для методов» в [Руководстве по быстрому программированию] (https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Methods.html): ' Swift дает имя первого параметра в методе локального имени параметра по умолчанию и дает по умолчанию второй и последующий имена параметров как локальные, так и внешние имена параметров. Это соглашение соответствует типичному соглашению об именах и вызовах, с которым вам будет знакомо писать методы Objective-C –

Смежные вопросы