好的,我一直在研究Apple的Swift手册,并遇到了这个例子。我输入了它,并收到一个“ com.apple.main-thread”,停止原因为:EXC_BAD_ACCESS(code = EXC_I386_GPFLT)错误:
if level > highestUnlockedLevel { highestUnlockedLevel = level }
我回去检查了我的工作。我通过TextWrangler将输入的内容与书中的示例进行了比较,没有差异。然后,我重启了机器,没有运气,然后又回到Xcode 6 Beta版本7上尝试了。同样的错误。实际上,以下代码摘自本书。有人可以尝试一下,看看他们是否收到相同的错误?
struct LevelTracker {
static var highestUnlockedLevel = 1
static func unlockLevel(level: Int) {
if level > highestUnlockedLevel { highestUnlockedLevel = level }
}
static func levelIsUnlocked(level: Int) -> Bool {
return level <= highestUnlockedLevel
}
var currentLevel = 1
mutating func advanceToLevel(level: Int) -> Bool {
if LevelTracker.levelIsUnlocked(level) {
currentLevel = level
return true
} else {
return false
}
}
}
class Player {
var tracker = LevelTracker()
let playerName: String
func completedLevel(level: Int) {
LevelTracker.unlockLevel(level + 1)
tracker.advanceToLevel(level + 1)
}
init(name: String) {
playerName = name
}
}
var player = Player(name: "Argyrios")
player.completedLevel(1)
println("highest unlocked level is now \(LevelTracker.highestUnlockedLevel)")
最佳答案
highestUnlockedLevel
定义为static
因此更改行
highestUnlockedLevel = level
至:
LevelTracker.highestUnlockedLevel = level
操场
struct LevelTracker {
static var highestUnlockedLevel = 1
static func unlockLevel(level: Int) {
if level > highestUnlockedLevel {
LevelTracker.highestUnlockedLevel = level
}
}
}
LevelTracker.unlockLevel(5)