2016-08-05 17 views
1

私はユーザーがゲーム中に達成できる複数の成果を挙げています。ユーザーが成果VCに行くと、成果が達成されたらイメージが表示されます。複数のboolをチェックし、そのブールに応じて画像を変更する最も速い方法

私は今のviewDidLoad機能でこのコードを使用しています:これは働くだろう

if unlockedAchievement1 == true 
     { 
      achievement1Text.textColor = UIColor.greenColor() 
      achievement1Image.image = UIImage(named: "achievement1Unlocked") 
     } 
     if unlockedAchievement2 == true 
     { 
      achievement2Text.textColor = UIColor.greenColor() 
      achievement2Image.image = UIImage(named: "achievement2Unlocked") 
     } 

が、それは、この残業をコピー&ペーストするには時間がかかります。どのように私はこれを短縮することができますか?私はクラスを作るべきですか?私はループについて読みましたが、私はそれをあまり理解していませんでした。どんな助けも歓迎です!

+0

コンテキストが正しい場合は、ガードステートメントを使用することをお勧めします。コードを明確にし、不要なピラミッドを避けるのに役立つかもしれません。 –

答えて

0

私はこれを前に見たように感じます。しかし、いずれにせよ...

//use array of bools. First declare as empty array. 
//Use Core data to achieve saving the Booleans if you need to. 
let achievements:[Bool] = [] 
let achievementsImage:[UIImage] = [] 
let achievementsText:[UITextView] = [] 

func viewDidLoad() { 
    //Say you have 5 achievements. 
    for index in 0 ..< 5 { 
     achievements.append(false) 
     achievementsImage.append(UIImage(named: "achievementLocked")) 
     achievementText.append(UITextView()) 
     //Then you can edit it, such as. 
     achievementText[index].frame = CGRect(0, 0, 100, 100) 
     achievementText[index].text = "AwesomeSauce" 
     self.view.addSubview(achievementText[index]) 
     achievementText[index].textColor = UIColor.blackColor() 
    } 
} 

//Call this function and it will run through your achievements and determine what needs to be changed 
func someFunction() { 
    for index in 0 ..< achievements.count { 
     if(achievements[index]) { 
      achievements[index] = true 
      achievementsImage[index] = UIImage(named: String(format: "achievement%iUnlocked", index)) 
      achievementsText[index].textColor = UIColor.greenColor 
     } 
    } 
} 
+0

ありがとうございます。しかし、私は最初にエラーが発生します:添え字で割り当てることができません:達成はlet定数です。私はそれをvarに変更しました。あなたが言ったように空の配列として最初に宣言しましたが、ロードしようとしましたが、配列がインデックス外だったのでクラッシュします。成果配列に5回のfalseを追加し、再度試してみました。「オプション値をアンラッピングしている間に予期せず見つからない」ため、クラッシュしました。ブレークポイントは "achievementsImage [index] = UIImage(" achievementLocked ")!)に設定されています。このエラーを取り除くにはどうすればよいですか? – Petravd1994

+0

母は私の悪いです。私の愚かな間違い。今すぐ編集してください – impression7vx

+0

今すぐチェックしてください。間違いはありません。しかし、それをテストしていない。 – impression7vx

0

は、私が最初の値は、元のブールであること、そして第二の値は、イメージ名であることを、あなたのunlockedAchievement1unlockedAchievement2は、などのオブジェクトのタプルを作るお勧めします。

// First create your data array 
var achievements = [(Bool, String)]() 
// Then you can make your achievements. 
// Initially, they're all unearned, so the Bool is false. 
let achievement1 = (false, "achievement1UnlockedImageName") 
achievements.append(achievement1) 
let achievement2 = (false, "achievement2UnlockedImageName") 
achievements.append(achievement2) 

// Now that you have your finished data array, you can use a simple for-loop to iterate. 
// Create a new array to hold the images you'll want to show. 
var imagesToShow = [String]() 
for achievement in achievements { 
    if achievement.0 == true { 
     imagesToShow.append(achievement.1) 
    } 
} 
+0

と書くことができます。正しく読めば、表示する画像だけで配列を作成していますよね?しかし、どうすれば自動的にイメージを変えることができますか? – Petravd1994

+0

10の成果があるとします。 'imagesToShow.count'はロックされていないイメージの数であり、' 10 - imagesToShow.count'はデフォルトのロックされたイメージであるイメージの数です。 – Bawpotter

関連する問題