2019년 1월 8일 화요일

Type Methods




struct LevelTracker {
   static var highestUnlockedLevel = 1
   var currentLevel = 1
   
   static func unlock(_ level: Int) {
       if level > highestUnlockedLevel {
           highestUnlockedLevel = level
       }
   }
   
   static func isUnlocked(_ level: Int) -> Bool {
       return level <= highestUnlockedLevel
   }
   
   @discardableResult
   mutating func advance(to level: Int) -> Bool {
       if LevelTracker.isUnlocked(level) {
           currentLevel = level
           return true
       } else {
           return false
       }
   }
}

class Player {
   var tracker = LevelTracker()
   let playerName: String
   func complete(level: Int) {
       LevelTracker.unlock(level + 1)
       tracker.advance(to: level + 1)
   }
   init(name: String){
       playerName = name
   }
}

var player = Player(name: "Argyrios")
player.complete(level: 1)
print("highest unlocked level is now \(LevelTracker.highestUnlockedLevel)")

player = Player(name: "Beto")
if player.tracker.advance(to: 6) {
   print("player is now on level 6")
} else {
   print("level 6 has not yet been unlocked")
}