Первые имена параметров Swift 3
В Swift 2, кажется, что первое имя параметра не всегда требуется при вызове функции. Теперь в Swift 3 первое имя параметра требуется при вызове функции. Например:
func frobnicate(runcible: String) {
print("Frobnicate: \(runcible)")
}
Swift 2.2 позволил вызвать функцию, просто набрав:
Frobnicate("Station")
Swift 3, похоже, требует, чтобы мы использовали имена первых параметров таких методов, как:
Frobnicate(runcible:"Station")
Случается ли это с Swift 3 для всех функций и методов или только в определенных ситуациях?
Ответы
Ответ 1
Да, это правильно. Swift фиксирует несогласованность языка таким образом (это всегда требовалось для инициализаторов).
Если вы не хотите использовать имя внешнего параметра, просто удалите его явно:
func frobnicate(_ runcible: String) {
print("Frobnicate: \(runcible)")
}
Вы можете прочитать полное обоснование в Swift Evolution 0046
Ответ 2
В i-Book вы можете прочитать Язык быстрого программирования (Swift 3). Также вы можете проверить это в WWDC 2016: Что нового в Swift
В Swift 3 по умолчанию функции используют свои имена параметров в качестве меток для своих аргументов. Напишите символ пользовательского аргумента перед именем параметра или напишите _ для использования метки аргументов.
fun greet(_ person: String, on day: String) -> String {
return "Hello \(person), today is \(day)."
}
greet("John", on: "Wednesday")
или
// This also works with Swift 2
fun addThreeNumber(_ first: Int, _ second: Int, _ third: Int) {
print(first+second+third)
}
addThreeNumber(1, 2, 3)
Ответ 3
Совершенно верно. В Swift 3.0 обязательна запись имен параметров для всех параметров (включая первый параметр). Имя параметра - это тот, который используется внутри тела реализации функции.
func frobnicate(runcible: String) {
print("Frobnicate: \(runcible)")
}
По умолчанию метка внешнего параметра такая же, как имя параметра, если вы явно не указали какую-либо метку параметра. Метка параметра - это та, которая используется для передачи аргументов при вызове функции. Если вам нужно, для лучшей цели ясности вы также можете явно указать внешние метки параметров. Пример ниже -
func frobnicate(runcibleExternalLabel runcible: String) {
print("Frobnicate: \(runcible)")
}
Если вы хотите пропустить метку внешнего параметра во время вызова функции, просто добавьте "_" перед именем параметра.
func frobnicate(_ runcible: String) {
print("Frobnicate: \(runcible)")
}
Ответ 4
Да Swift 3 требует отправки первой метки параметров.
Пожалуйста, обратитесь Изменения Swift 3
Ответ 5
Причина, по которой вам нужны метки для параметров, - это то, что другой код может предоставлять параметры в любом порядке.
Без ярлыков, когда вы вызываете функцию, параметры анонимны, и вы не можете быть уверены, что поставили их в неправильном порядке.
Поместите метки перед параметрами и инструментами кода, чтобы сделать намного лучшую работу при обнаружении ошибок, которые нам сделали люди.
Подчеркивание - это просто способ справиться с переходом от старого кода; имена методов, включая неявный первый параметр. Вы должны изменить любые подчеркивания, которые миграция добавляет к вашему коду в явную метку параметра. Вы знаете, что это имеет смысл.