这是我的第一场比赛,而我是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