Ответ 1
Кажется, что в вашем примере вам нужно изменить переданные аргументы внутри функции как побочный эффект и потребовать, чтобы обновленные значения были доступны после вызова функции. В этом случае вам нужно использовать модификатор inout
.
В противном случае, если вам нужно только изменить параметры внутри вызова функции, вы можете явно определить их как переменные в определении функции:
Использование параметров in-out
Сначала измените объявление функции:
func exampleFunction(inout value: String, index: inout Int) -> Bool
Теперь параметр in-out имеет значение, которое передается функции, изменяется функцией и затем возвращается обратно из функции, заменяя исходное значение. Чтобы это сработало, вы не можете передать литерал в свою функцию, так как впоследствии не будет сохранено измененное значение. Фактически, она должна быть переменной. Вы не можете передать значение константы или буква в качестве аргумента, потому что константы не могут быть изменены. Следовательно, смените вызов функции на:
var passed = "passedValue"
var index = 2
var b = exampleFunction(&passed, &index)
После вызова оба passed
и index
будут содержать новые значения, измененные функцией.
Кроме того, обратите внимание на &
перед каждым аргументом при вызове функции. Он должен быть там, чтобы указать, что аргумент может быть изменен функцией.
Использование переменных параметров - Удалено в Swift 3
В этом случае все, что вам нужно сделать, это изменить объявление функции для использования переменных параметров, как показано ниже:
func exampleFunction(var value: String, var index: Int) -> Bool
Изменения, внесенные в аргументы внутри области действия функции, не видны вне функции или сохраняются где-либо после вызова функции.