好的,我一直在研究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)

09-25 16:47
查看更多