2015-05-26 7 views
0

Я довольно новичок в Swift и программировании, поэтому это может показаться довольно простым, но я не смог найти ответ на StackOverflow или Google, пытаясь решить эту проблему Cегодня.Переменная, сохраняющая старое значение при попытке ее сброса

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

Например, если у игрока есть 9 жизней, а игрок 2 имеет 0, если я нажму кнопку сброса, то оба итоговых значения будут показывать 10 (по умолчанию), однако, если я вычитаю 1 из игрока 1, он покажет 8, и если Я добавил 1 к игроку 2, он будет показывать 1 вместо 11.

Я думаю, мне нужно каким-то образом передать значение из сброса или просто поместить переменную по умолчанию где-то еще? Любая помощь приветствуется. Благодарю.

import UIKit 

class ViewController: UIViewController { 

@IBOutlet weak var playerOneAdd: UIButton! 
@IBOutlet weak var playerOneMinus: UIButton! 
@IBOutlet weak var playerOneLife: UILabel! 
@IBOutlet weak var playerTwoMinus: UIButton! 
@IBOutlet weak var playerTwoPlus: UIButton! 
@IBOutlet weak var playerTwoLife: UILabel! 
@IBOutlet weak var resetButton: UIButton! 

var playerOne = 10 
var playerTwo = 10 

override func viewDidLoad() { 
    super.viewDidLoad() 

    playerOneLife.transform = CGAffineTransformMakeRotation(3.14) 
} 

@IBAction func PlayerOnePlusButton(sender: AnyObject) { 
    ++playerOne 
    playerOneLife.text = String(playerOne) 
} 

@IBAction func playerOneMinusButton(sender: AnyObject) { 
    --playerOne 
    playerOneLife.text = String(playerOne) 
} 

@IBAction func playerTwoMinusButton(sender: AnyObject) { 
    --playerTwo 
    playerTwoLife.text = String(playerTwo) 
} 

@IBAction func playerTwoPlusButton(sender: AnyObject) { 
    ++playerTwo 
    playerTwoLife.text = String(playerTwo) 
} 

@IBAction func resetPressed(sender: AnyObject) { 
    var playerOne = 10 
    var playerTwo = 10 
    playerOneLife.text = String(playerOne) 
    playerTwoLife.text = String(playerTwo) 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

} 

ответ

1

Когда вы снова вызываете var, вы переопределяете переменную. Вы должны просто установить его равным.

playerOne = 10 
playerTwo = 10 
1

Вы должны удалить var ключевое слово в resetPressed:

@IBAction func resetPressed(sender: AnyObject) { 
    playerOne = 10 
    playerTwo = 10 
    playerOneLife.text = String(playerOne) 
    playerTwoLife.text = String(playerTwo) 
} 

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

+0

Ах, я знал, что делаю что-то странное. Большое спасибо! – crowdedstranger

Смежные вопросы