如何在Model中增加私有变量?

时间:2018-03-02 13:59:09

标签: ios xcode

在我的struct Main Model(MainModel.swift)中:

private var charLevel: Int = 1

mutating func setCharLevel(_ value: Int) {
     charLevel = value
}

var getCharLevel: Int? {
     get {
          return charLevel
     }
}

在我的firstViewController.swift中:

private var MyModel = MainModel()
let sb = UIStoryBoard(name: "Main", bundle: nil)

@IBAction func addLevel(_ sender: UIButton){
     if let secondVC = sb.instantiateViewController(withIdentifier: "SecondVC") as? SecondViewController {
          self.present(secondVC, animated: true, completion: nil)

          let charNewLevel = MyModel.getCharLevel! + 1
          MyModel.setCharlevel(charNewLevel)
     }
}

SecondVC只有一个标签显示来自MainModel.swift的charLevel和一个带有self.dismiss的按钮返回给firstViewController。所以它只是循环/循环。我的问题是级别只有2级,即使我做了3次以上运行,我还缺少什么?我希望它每次运行增加1(第一次运行:2次,第二次运行:3次,第三次运行:4次,依此类推)。谢谢学习的学生。

编辑:

firstViewController - > ViewController(原始名称)

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var battleDescription: UILabel!
    @IBOutlet weak var heroHealthLabel: UILabel!
    @IBOutlet weak var enemyHealthLabel: UILabel!
    @IBOutlet weak var byBattleDescription: UILabel!

    private var QuestModel = MainModelQuest()

    let sb = UIStoryboard(name: "Main", bundle: nil)

    override func viewDidLoad() {
        super.viewDidLoad()

        QuestModel.setHeroHealth(1000)
        QuestModel.setHeroMaxHealth(1000)
        QuestModel.setEnemyHealth(150)

        if let initialTempHeroHealth = QuestModel.getHeroHealth {
            checkHeroLabel = initialTempHeroHealth
        }

        if let initialTempEnemyHealth = QuestModel.getEnemyHealth {
            checkEnemyLabel = initialTempEnemyHealth
        }
    }

    var checkHeroLabel: Int {
        get {
            return Int(heroHealthLabel.text!)!
        } set {
            heroHealthLabel.text = String(newValue)
        }
    }

    var checkEnemyLabel: Int {
        get {
            return Int(enemyHealthLabel.text!)!
        } set {
            enemyHealthLabel.text = String(newValue)
        }
    }

    @IBAction func attackOption(_ sender: UIButton) {
        let tempHeroRandomX = arc4random_uniform(5) + 1
        let tempHeroRandomY = arc4random_uniform(5) + 1

        let tempEnemyRandomX = arc4random_uniform(5) + 1
        let tempEnemyRandomY = arc4random_uniform(5) + 1

        if tempHeroRandomX == tempHeroRandomY {
            battleDescription.text = "Hero's attacked missed."
            QuestModel.setHeroDamage(0)
        } else {
            if let chosenAttack = sender.currentTitle {
                switch chosenAttack {
                case "Attack1":
                    // 30 - 40
                    let tempHeroRandAttack = arc4random_uniform(11) + 30
                    QuestModel.setHeroDamage(Int(tempHeroRandAttack))
                case "Attack2":
                    // 20 - 30
                    let tempHeroRandAttack = arc4random_uniform(11) + 20
                    QuestModel.setHeroDamage(Int(tempHeroRandAttack))
                case "Attack3":
                    // 10 - 20
                    let tempHeroRandAttack = arc4random_uniform(11) + 10
                    QuestModel.setHeroDamage(Int(tempHeroRandAttack))
                case "Attack4":
                    // 1 - 10
                    let tempHeroRandAttack = arc4random_uniform(10) + 1
                    QuestModel.setHeroDamage(Int(tempHeroRandAttack))
                default:
                    break
                }
            }
        }

        if tempEnemyRandomX == tempEnemyRandomY {
            byBattleDescription.text = "The enemy's attacked missed"
            QuestModel.setEnemyDamage(0)
        } else {
            let tempEnemyRandAttack = arc4random_uniform(11) + 10
            QuestModel.setEnemyDamage(Int(tempEnemyRandAttack))
        }

        if QuestModel.getEnemyDamage! > QuestModel.getHeroHealth! {
            QuestModel.setHeroHealth(0)

            if let heroKilledVC = sb.instantiateViewController(withIdentifier: "HeroFaintedVC") as? ThirdViewController {
                self.present(heroKilledVC, animated: true, completion: nil)
            }
        } else {
            let heroDamage = QuestModel.getHeroHealth! - QuestModel.getEnemyDamage!
            QuestModel.setHeroHealth(heroDamage)
        }

        if QuestModel.getHeroDamage! > QuestModel.getEnemyHealth! {
            QuestModel.setEnemyHealth(0)

            if let enemyKilledVC = sb.instantiateViewController(withIdentifier: "EnemyFaintedVC") as? SecondViewController {
                self.present(enemyKilledVC, animated: true, completion: nil)

                let checkTotalExpi = QuestModel.getHeroExpi! + 30

                if checkTotalExpi >= QuestModel.getHeroMaxExpi! {
                    let heroNewLevel = QuestModel.getHeroLevel! + 1
                    QuestModel.setHeroLevel(heroNewLevel)

                    let newHeroMaxExpi = QuestModel.getHeroMaxExpi! * 2
                    QuestModel.setHeroMaxExpi(newHeroMaxExpi)
                    QuestModel.setHeroExpi(0)
                }

                enemyKilledVC.infoObject = QuestModel.getHeroLevel
            }
        } else {
            let enemyDamage = QuestModel.getEnemyHealth! - QuestModel.getHeroDamage!
            QuestModel.setEnemyHealth(enemyDamage)
        }

        if QuestModel.getHeroDamage! > 0 {
            if QuestModel.getEnemyHealth! <= 0 {
                battleDescription.text = "Hero dealt \(QuestModel.getHeroDamage!) damage and the enemy fainted."
            } else {
                if let attackName = sender.currentTitle {
                    battleDescription.text = "Hero used " + attackName + " and dealt \(QuestModel.getHeroDamage!) damage."
                }
            }
        }

        if QuestModel.getEnemyDamage! > 0 {
            if QuestModel.getHeroHealth! <= 0 {
                byBattleDescription.text = "the enemy dealt \(QuestModel.getEnemyDamage!) and the hero fainted."
            } else {
                byBattleDescription.text = "Enemy attacked and dealt \(QuestModel.getEnemyDamage!) damage."
                checkHeroLabel = QuestModel.getHeroHealth!
                checkEnemyLabel = QuestModel.getEnemyHealth!
            }
        }
    }
}

MainModel - &gt; MainModelQuest(原始名称)

import Foundation

struct MainModelQuest {


    // Hero Properties
    private var heroHealth: Int?
    private var heroMaxHealth: Int?
    private var heroMana: Int?
    private var heroMaxMana: Int?
    private var heroStamina: Int?
    private var heroMaxStamina: Int?
    private var heroLevel: Int = 1
    private var heroDamage: Int?
    private var heroMaxDamage: Int? // Not yet used
    private var heroExpi: Int = 25
    private var heroMaxExpi: Int = 30
    private var heroGold: Int? // Not yet used
    private var heroGainedGold: Int? // Not yet used

    // Enemy Properties
    private var enemyHealth: Int?
    private var enemyDamage: Int?
    private var enemyLevel: Int? // Not yet used

    mutating func setHeroHealth(_ value: Int) {
        heroHealth = value
    }

    mutating func setHeroMaxHealth(_ value: Int) {
        heroMaxHealth = value
    }

    mutating func setHeroLevel(_ value: Int) {
        heroLevel = value
    }

    mutating func setHeroDamage(_ value: Int) {
        heroDamage = value
    }

    mutating func setHeroExpi(_ value: Int) {
        heroExpi = value
    }

    mutating func setHeroMaxExpi (_ value: Int) {
        heroMaxExpi = value
    }

    mutating func setEnemyHealth(_ value: Int) {
        enemyHealth = value
    }

    mutating func setEnemyDamage(_ value: Int) {
        enemyDamage = value
    }

    var getHeroHealth: Int? {
        get {
            return heroHealth
        }
    }

    var getHeroMaxHealth: Int? {
        get {
            return heroMaxHealth
        }
    }

    var getHeroLevel: Int? {
        get {
            return heroLevel
        }
    }

    var getHeroDamage: Int? {
        get {
            return heroDamage
        }
    }

    var getHeroExpi: Int? {
        get {
            return heroExpi
        }
    }

    var getHeroMaxExpi: Int? {
        get {
            return heroMaxExpi
        }
    }

    var getEnemyHealth: Int? {
        get {
            return enemyHealth
        }
    }

    var getEnemyDamage: Int? {
        get {
            return enemyDamage
        }
    }
}

SeconfViewController

import UIKit

class SecondViewController: UIViewController {

    var infoObject: Int? {
        didSet {
            enemyDefeatedObject.text = "Lv. " + String(infoObject!)
        }
    }

    @IBOutlet weak var enemyDefeatedObject: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    // Return to map
    @IBAction func BacktoMapVC(_ sender: Any) {
        let sb = UIStoryboard(name: "Main", bundle: nil)

        if let mapVC = sb.instantiateViewController(withIdentifier: "MapVC") as? MapViewController {
            self.present(mapVC, animated: true, completion: nil)
        }
    }

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

我知道这可能是一小部分代码,但这完成了我迄今为止所练习的内容,我可能在这里有不正确的约定,但我们非常欢迎您在这一点上纠正我。我的问题是在第一次运行程序时,它得到正确的级别,即2,第二次运行和后续运行仍然是两次。任何建议都是受欢迎的。谢谢你。

0 个答案:

没有答案