2016-06-16 3 views
0

Я пытаюсь обновить значение переменных Int (которые от одной функции) внутри другой функции. Сейчас у меня есть две переменные, объявленные 0 вне любых функций. Затем в одной функции им присваивается значение 1 или 0. До этого момента все нормально. Затем я пытаюсь обновить переменные, когда пользователь удаляет UIImageView (вычитая 3 из одной переменной и добавляя две к другой). Проблема, с которой я сталкиваюсь, заключается в том, что вместо вычитания 3 и добавления 2 к 1 и 0, это вычитание 3 и добавление 2 к исходному 0, что переменные были объявлены как.Обновление переменных из одной функции внутри другой

var playerA:Int = 0 
var playerB:Int = 0 

func firstFunction(playerA:Int, playerB:Int) { 
    if counter%2 { 
     playerA = 1 
     playerB = 0 
    } 
    else { 
     playerA = 0 
     playerB = 1 
    } 
} 

func secondFunction(playerA:Int, playerB:Int) { 
    counter += 1 
    if counter%2 0 { 
     playerA += -3 
     playerB += 2 
    } 
    else { 
     playerA += 2 
     playerB += =3 
    } 

Здесь secondFunction возвращает -3 и 2 вместо -2 и 2.

Моя идея, чтобы исправить это, чтобы использовать массив, который возвращается из firstFunction, и для обозначения элементов по индексу (например, ->[Int, Int], где Ints: playerA и playerB).

+0

Не передавать переменные в функции. Он должен работать лучше. Переменные глобальны, они видны во всем объекте. – FredericP

ответ

0

Вы должны показать нам, как вы называете свои функции, но это не сработает, если вы не объявите параметры как inout. Read up here to understand how it works (прокрутите вниз до In-Out Параметры), он приходит с этим примером:

func swapTwoInts(inout a: Int, inout _ b: Int) { 
    let temporaryA = a 
    a = b 
    b = temporaryA 
} 

var someInt = 3 
var anotherInt = 107 
swapTwoInts(&someInt, &anotherInt) 
print("someInt is now \(someInt), and anotherInt is now \(anotherInt)") 
// Prints "someInt is now 107, and anotherInt is now 3" 
+0

Большое спасибо, все работает сейчас! –

+0

@Riley Рад, что это сработало, вы можете отметить мой ответ как правильный. – lawicko

1

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

var counter: Int = 0 
var playerA: Int = 0 
var playerB: Int = 0 

func firstFunction() { 
    if counter % 2 == 0 { 
     playerA = 1 
     playerB = 0 
    } 
    else 
    { 
     playerA = 0 
     playerB = 1 
    } 
} 

func secondFunction() { 
    counter += 1 
    if counter % 2 == 0 { 
     playerA -= 3 
     playerB += 2 
    } 
    else 
    { 
     playerA += 2 
     playerB -= 3 
    } 
} 
Смежные вопросы