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

Как мы можем изменить параметр функции?

В Swift мы можем изменить значения локальных параметров функции с помощью функции?

Вроде:

 func exampleFunction(value : String, index : Int) -> Bool
        {
         value = "Changed Value" // it showing error
         index = 3  // it showing error
        return true
        }

Функция вызова в viewDidLoad():

 var flag  = exampleFunction("Passed Value" , 2)

Можно ли изменить значение и индекс в области exampleFunction? если нет, есть ли другой способ сделать это? Потому что, используя это, мы изменяем только значение temp.

var temp = value
temp = "temp Change"
4b9b3361

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

Изменения, внесенные в аргументы внутри области действия функции, не видны вне функции или сохраняются где-либо после вызова функции.

Ответ 2

Если это просто для области действия, вы можете объявить свою функцию как

func exampleFunction(var value : String, var index : Int) -> Bool { }

Примечание. Однако это было удалено в Swift3.

Просто добавьте var.

func exampleFunction(value : String, index : Int) -> Bool {
      var value = value
      var index = index

действительно, Xcode IDE будет автофиксировать это для вас.


Если вы намерены изменить параметры в своем глобальном контексте, вы можете использовать inout.

Ответ 3

var Параметр устарел и будет удален из Swift 3.0. Если вы хотите изменить параметр внутри своего тела функции, вы должны сохранить переданный параметр в некоторой локальной переменной и изменить его

    func exampleFunction(var value: String, var index: Int) -> Bool {
       var index = index
       ...
    }

inout Параметр все еще существует. Поэтому, если вы хотите, чтобы изменения, которые вы делаете с переданным параметром, отражались вне тела функции, вы должны использовать inout Parameter.

Ответ 4

Легко изменить переменную в функциональном блоке на var

func example(value : string){
var myVar = value
...
now you can change the value 
myVar = "example"
}