我正在关注 YouTube 上的斯坦福 CS193 SwiftUI iOS 开发课程,我很难理解某段代码是如何工作的。
import Foundation
struct MemoryGame<CardContent> where CardContent: Equatable {
private(set) var cards: Array<Card>
**private var indexOfTheOneAndOnlyFaceUpCard: Int?**
mutating func choose(_ card: Card) {
if let chosenIndex = cards.firstIndex(where: { $0.id == card.id }),
!cards[chosenIndex].isFaceUp,
!cards[chosenIndex].isMatched
{
**if let potentialMatchIndex = indexOfTheOneAndOnlyFaceUpCard** {
**if cards[chosenIndex].content == cards[potentialMatchIndex].content** {
cards[chosenIndex].isMatched = true
cards[potentialMatchIndex].isMatched = true
}
indexOfTheOneAndOnlyFaceUpCard = nil
} else {
for index in cards.indices {
cards[index].isFaceUp = false
}
indexOfTheOneAndOnlyFaceUpCard = chosenIndex
}
cards[chosenIndex].isFaceUp.toggle()
}
print("\(cards)")
}
我在我关注的行周围加上了星号。我不明白如何cards[chosenIndex].content
与 进行比较cards[potentialMatchIndex].content
,这源于我不了解if let potentialMatchIndex = indexOfTheOneAndOnlyFaceUpCard
生产线的工作方式。我相信我对选项以及这段代码的运行方式有一个大致的了解,但我真的不明白数据/值来自哪里indexOfTheOneAndOnlyFaceUpCard
。
这是供参考的视频。他在 1:12:40 开始谈论这些代码行。感谢您提前提供任何帮助!