这是@IBAction函数的代码
@IBAction func touchCard(_ sender: UIButton) {
flipCount += 1
if let index = buttonCollection.firstIndex(of: sender) {
game.chooseCard(at: index)
updateViewFromModel() // I set breakpoint at here
}
}
Concentration.swift文件,是MVC模型的一部分
class Concentration {
var cards = [Card]()
var numberOfPairsOfCards: Int
var identifierOfOneAndOnlyOneCard: Int? {
didSet {
print("identifierOfOneAndOnlyOneCard: \(identifierOfOneAndOnlyOneCard)")
}
}
init(numberOfPairsOfCards: Int) {
self.numberOfPairsOfCards = numberOfPairsOfCards
for _ in 0..<numberOfPairsOfCards {
let card = Card()
cards += [card, card]
}
}
func chooseCard(at Index: Int) {
print("Index: \(Index)")
if !cards[Index].isMatched {
if let matchIndex = identifierOfOneAndOnlyOneCard, matchIndex != Index {
// check if cards match
if cards[matchIndex].identifier == cards[Index].identifier {
cards[matchIndex].isMatched = true
cards[Index].isMatched = true
}
cards[Index].isFaceUp = true
identifierOfOneAndOnlyOneCard = nil
} else {
// either no cards or 2 cards are face up
for flipDownIndex in cards.indices {
cards[flipDownIndex].isFaceUp = false
}
cards[Index].isFaceUp = true
identifierOfOneAndOnlyOneCard = Index
}
}
}
}
the code of func updateViewFromModel()
Card.swift文件,是MVC模型的一部分
struct Card {
var isFaceUp: Bool = false
var isMatched: Bool = false
var identifier = getUniqueIdentifier()
static var uniqueIdentifier: Int = 0
static func getUniqueIdentifier() -> Int{
uniqueIdentifier += 1
return uniqueIdentifier
}
}
这些代码是CS193p的项目集中游戏的一部分。
当我逐步跟踪代码时,发现有些混乱。
我想弄清楚的是,在第9步中,为什么UI没有及时更新。
非常感谢您的帮助!
答案 0 :(得分:1)
在视图上进行更改时,它会等待重绘周期,因此视图不会立即更新。 IBAction没什么问题,您将更改放在其他位置并设置断点,不会有任何区别。
答案 1 :(得分:0)
这可能是由于模拟器速度慢,因为我也遇到了模拟器速度慢的问题,我不知道是否有人也遇到了这个问题,我怀疑您是否遇到了这个问题,但是我不确定。
1-使用Xcode 9.2和IOS11的模拟器时,代码没有问题,可以更新模拟器。
2-在您的设备上尝试一下