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

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

案例:我有一个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")
        }
    }

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

问题:如何缩短此代码以使其正常工作?

最佳答案 //有多少成就?

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")
        }
    }
}

然后,当他们解锁成就时,您可以确定他们处于什么级别.然后设置成就[等级1] =真//(如果你使用从1开始的等级)

点赞