乱暴なコードになってしまいました。
もっとIFを使って、動きの指令をしてあげるべきだと思います。
//ループを作る@コードを学ぼう2 let totalGems = randomNumberOfGems //キャラクターの初期化 let ch = Character() //ブロックの初期化 let block1 = Block() let block2 = Block() //宝石の数を数える変数 var gems = 0 //ブロックの配置 world.place(block1, atColumn: 0, row: 2) world.place(block2, atColumn: 3, row: 3) //キャラクターの位置配置 world.place(ch, facing: east, atColumn: 4, row: 0) func getGem() { if ch.isOnGem { ch.collectGem() gems += 1 } if ch.isBlocked { ch.turnLeft() } ch.moveForward() } while gems < totalGems { getGem() }