如何通过使用结构来缩短此代码?

时间:2016-07-24 20:26:59

标签: swift structure

我刚刚开始学习结构,我认为它可以通过使用结构来解决,但我不确定。

案例:我有一个VC,玩家可以解锁很多成就。 每项成就都有: 1.成就图像和文字周围的边界图像 2.成就图像(每个成就都有一个简单的“锁定”图像,表示成就被锁定) 3.成就文本 4.一个布尔值来确定成就的状态(false = locked,true = unlocked) 在玩游戏时,可以完成一些成就。这样,布尔值将设置为true。当玩家返回成就VC时,必须将成就图像设置为该成就的正确图像。

问题:我现在的代码如下:

func SetImagesForPowerUps()
    {
        if UnlockedAchievement1 == true
        {
            Achievement1Text.textColor = UIColor.greenColor()
            Achievement1Image.image = UIImage(named: "Achievement1Unlocked")
        }
        if UnlockedAchievement2 == true
        {
            Achievement2Text.textColor = UIColor.greenColor()
            Achievement2Image.image = UIImage(named: "Achievement2Unlocked")
        }
    }

正如你所看到的,我必须一遍又一遍地重复我的代码,并且加班很多。我确信有更快的方法,除了我没有知识,我可以更快地解决这个问题。

问题:如何缩短此代码以使其有效?

1 个答案:

答案 0 :(得分:2)

//有多少成就?

var achievements:[Bool] = []
var achievementText:[UILabel] = [] //I am not sure what achievementText Parent class is
var achievementImage:[UIImage] = [] //AchievementImage is subclass of UIImage? Not sure what achievementImage parent class is. 

for index in 0 ..< x 
    //Where x is the number of possible achievements, default all achievements to false at the very beginning of the app or wherever.
    achievements.append(false)
}

func SetImagesForPowerUps() {
    for index in 0 ..< achievements.count { 
        if(achievements[index]) {
            achievementText[index].textColor = UIColor.greenColor()
            achievementImage[index].image = UIImage(named: "AchievementUnlocked")
        }
    }
}

然后,当他们解锁成就时,您可以确定他们的成绩。然后设置achievements[level+1] = true //(If you use levels starting at 1)