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

标签 swift multidimensional-array struct enums

我已经在 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/

相关文章:

python - 如何在没有python解释的情况下捕获二进制字符串中的所有字符

c - 另一个可变大小结构内的可变大小结构

swift - 在 Swift 4 中将视频旋转 90 度

ios - Swift 泛型类如何从中创建类型对象

swift - ios13 UIPopoverViewController 显示 UITableViewController - 安全区域问题/表格缺失部分

java - 如何在 Java 中初始化数组中的所有整数?

c# - 有效跳过二维字符串数组中的空白行

java - 将数组中的元素移动到空位置

ios - 如何在 Swift 中将 UILongPressGestureRecognizer 与 UICollectionViewCell 一起使用?

c - struct 中的 int 字段尚未初始化的值是什么?