这是我的第一场比赛,而我是swift和sprite套件的新手。

对于每个需要获得等级的课程,我都必须有一个等级。就像car lev1 car lev 2等。我已经读过有关protocol extension等的信息,女巫是进行级别管理的最佳方法吗?

我试图使用LevelTraker作为该协议的扩展:

protocol LevelTracker {
     typealias    TypeUnit: TypeGame
     var         nameClass: String! {get set}
     var     currentLevel : Int {get set}
     mutating func levelIncreases()
}


但通过扩展,我必须为每个需要级别的类编写3个var。
我尝试使用结构LevelTraker扩展相同的LevelTraker:

func getClassName (theClass:AnyObject) -> String {
     let name = _stdlib_getDemangledTypeName(theClass); return name}

protocol TypeGame {}

enum transportType : TypeGame {
    case ground, sea, air
}

struct LevelTracker {
    var sender: AnyObject
    var TypeUnit: TypeGame

    private func getSaveFileWhitName() -> String {
        let saveWithName = getClassName(sender) + "." + String(TypeUnit)
        return saveWithName
    }

    var currentLevel : Int {
        get {
            let stringName = getSaveFileWhitName()
            let returnValue : Int = dataBase.read(stringName) as? Int ?? 1    //Check for first run of app, if = nil, set = 1
            return returnValue
        }
        set (newValue) {
            let stringName = getSaveFileWhitName()
            let level : Int = self.currentLevel
            let val = newValue
            if (newValue > level) {dataBase.write(val, key: stringName)}
        }
    }

    mutating func levelIncreases() {self.currentLevel++}
    ///SERVE SOLO PER SVILUPPO
    mutating func RESETLEVEL() {dataBase.write(1, key: getSaveFileWhitName())}

}


使用方法:(感谢@Krzak)

class car  {
    init () {
        let level = LevelTracker(sender: self, TypeUnit: transportType.ground).currentLevel
    }
}


但是我不想修改所有使用级别的init对象,并且与super super类共有,某些类没有适当级别。

最佳答案

最后一行是出现编译器错误的原因。您错过了.ground

我不确定您是如何想的,尽管这行得通,不是var吗?

var level = LevelTracker(sender: self, TypeUnit: transportType.ground).currentLevel

10-07 21:53