gpt4 book ai didi

swift - 如何在 Swift 中保留复杂的数据结构,关于前进方向的建议

转载 作者:行者123 更新时间:2023-11-28 09:13:40 25 4
gpt4 key购买 nike

我已经在 Xcode 6 和 swift 中完成了一个纸牌游戏。以下是

enum Rank: Int {
case Ace = 1
case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten
case Jack, Queen, King
var description: String {
switch self {
case .Ace:
return "ace"
case .Jack:
return "jack"
case .Queen:
return "queen"
case .King:
return "king"
default:
return String(self.rawValue)
}
}
}

enum Suit {
case Spades, Hearts, Diamonds, Clubs
static let allValues = [Spades, Hearts, Diamonds, Clubs]
var description: String {
switch self {
case .Spades:
return "spades"
case .Hearts:
return "hearts"
case .Diamonds:
return "diamonds"
case .Clubs:
return "clubs"
}
}
}

struct AbstractCard {
var rank: Rank
var suit: Suit
var faceup: Bool
var description: String {
return "\(rank.description) of \(suit.description)"
}
var facedown: Bool {return !faceup}
var color: String {
return suit.color
}
}


struct AbstractPile {
var cards:[AbstractCard] = []
}

struct AbstractStack {
var cards:[AbstractCard] = []
}

只要说游戏已经完成并且可以运行就够了。这个抽象的东西用于游戏逻辑并与代表它们的 SKNodes 平行。

最大的问题是,我到底该如何让游戏持续下去?我想以某种方式存储 AbstractPile 和 AbstractStack,然后检索它们。

我已经有了物理堆栈镜像抽象堆栈等的方法...,所以我需要做的就是保留这些结构。

一旦我开始对 AbstractPile 进行 nscoding,我就不知所措了,因为通过 NSCoding 方式的进展让我陷入了困境。这是我被难住的地方

class AbstractPile: NSCoding {
var cards:[AbstractCard] = []
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeArrayOfObjCType(type:, count: cards.count, at: <#UnsafePointer<Void>#>)
}
required init(coder aDecoder: NSCoder) {
cards = aDecoder.decodeObjectForKey("cards") as [AbstractPile]
}
}

请帮忙!

最佳答案

对于那些最终来到这里的人,我决定继续使用 plist 来存储游戏中的值。我自己使用枚举中的函数对它们进行编码以编码(转换为字符串,即 Ace_Hearts_faceup)并解码字符串。然后我将字符串保存在 plist 中并从 plist 中重新加载。

我真的没有看到任何替代方案。核心数据超出了这个范围,使用 NSEncode,虽然对场景来说很棒,但对于存储抽象信息来说真的太复杂了。

关于swift - 如何在 Swift 中保留复杂的数据结构,关于前进方向的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28461876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com