Подтвердить что ты не робот

Первые имена параметров 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 для всех функций и методов или только в определенных ситуациях?

4b9b3361

Ответ 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

Причина, по которой вам нужны метки для параметров, - это то, что другой код может предоставлять параметры в любом порядке.

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

Поместите метки перед параметрами и инструментами кода, чтобы сделать намного лучшую работу при обнаружении ошибок, которые нам сделали люди.

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