"Неявное преобразование из <тип кортежа> в <тип кортежа 2> требует временной ошибки" при передаче кортежа в качестве аргумента inout

Это мой код:

var myTuple = ("bar", 42)

func foo(_ bar: inout (arg1: String, arg2: Double)) {
    [...]
}

foo(&myTuple)

Я получаю следующую ошибку для этой строки:

foo(&myTuple)

Невозможно передать неизменяемое значение в качестве аргумента inout: неявное преобразование из '(String, Double)' в '(arg1: String, arg2: Double)' требует временного

2 ответа

Проблема в том, что в вашей переменной кортежа отсутствуют метки, присутствующие в функции. Замените его следующим:

var myTuple = (arg1: "bar", arg2: 42)

Объяснение @Hamish:

Проблема в том, что неявное преобразование требуется для (String, Int) чтобы соответствовать (arg1: String, arg2: Int) - выполняя неявное приведение, компилятор получает временное значение, которое не может быть передано inout. Вот почему ошибка (несколько запутанно) говорит о неизменном значении.

У вас есть два варианта сделать это

Первый: делай так

var account3 = (name: "state bank personal", balance: 1000.00)

Или второе: смени метод и используй так

func desposit0(amount:Double,account:inout (String,Double))->(String,Double)

использовать: account.0 и account.1

Другие вопросы по тегам