我在Swift(纸牌游戏)中编写了自己的第一个应用程序,并陷入了第一步……让我先向您展示代码。我有一个结构-卡-一个对象-甲板:
import SwiftUI
struct Card {
enum suit: String {
case clubs = "♠"
case diamonds = "♢"
case hearts = "♡"
case spades = "♣"
}
struct Rank {
let name: String
let power: Int
}
let suit: suit
let rank: Rank
let pic: Image
}
class Deck {
private var allSuits: [Card.suit] = [.clubs,.diamonds,.hearts,.spades]
private var allRanks = [
Card.Rank(name: "6", power: -4),
Card.Rank(name: "7", power: -3),
Card.Rank(name: "8", power: -2),
Card.Rank(name: "9", power: -1),
Card.Rank(name: "10", power: 0),
Card.Rank(name: "J", power: 1),
Card.Rank(name: "Q", power: 2),
Card.Rank(name: "K", power: 3),
Card.Rank(name: "A", power: 4)]
let allCards: [Card]
var cardsInGame: [Card]
init() {
var allCards = [Card]()
for suit in allSuits {
for rank in allRanks {
allCards.append(Card(suit: suit, rank: rank, pic: Image("\(rank.name)\(suit.rawValue)")))
}
}
self.allCards = allCards
self.cardsInGame = allCards
}
public func shuffle() {
self.cardsInGame = self.cardsInGame.shuffled()
}
var cardsLeftInDeck: Int {
get {
return cardsInGame.count
}
}
}
好像Deck在卡名称和那里的图片之间具有正确的链接。然后是ContentView.swift中非常简单的代码:
import SwiftUI
struct ContentView: View {
var deck = Deck()
var body: some View {
VStack {
Button("Shuffle cards", action: {
deck.shuffle()
})
deck.cardsInGame[0].pic
}
}
}
因此,当我按下按钮时,卡座会随机播放,但显示的图像没有任何变化deck.cardsInGame[0].pic
-保持不变。我在那里可能错过了什么问题?可能只是对我在当前的结构和类设置中可能做错了什么(目前为止对我了解不多)给出一些总体看法?
您可以ObservableObject
用来更新您的视图。
像这样声明甲板
class Deck: ObservableObject {
进而
@Published var cardsInGame: [Card]
现在在ContentView中将卡组声明为ObservedObject,并且图像会自动刷新
struct ContentView: View {
@ObservedObject var deck = Deck()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句