Methods

2017-10-31  本文已影响0人  夜雨聲煩_
总结

类型属性即类、结构体、枚举的公用静态属性,可以使用类型直接获取,类型方法同理,不针对个体而言,在类型方法中是不能修改和调用实例属性和实例方法的。而实例属性和实例方法,通过实例来访问,所以不同的实例可以储存不同的值,也可以通过方法来改变各自的存储值,同时你也可以在实例方法中修改类型属性,统一做提升等修改。根本区别在于针对类型还是针对实例。
例如

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)")
// Prints "highest unlocked level is now 2"

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")
}
// Prints "level 6 has not yet been unlocked"
上一篇下一篇

猜你喜欢

热点阅读