ios - .append() 到自定义结构的集合

标签 ios arrays swift struct

我有一个自定义的结构,用于创建、洗牌和发牌。

struct Card {
    let pip : Pip
    let suit : Suit

    var isFaceCard : Bool {
        return pip.rawValue > 10
    }

    var color : CardColor {
        return suit.color
    }
}

其次,我有一个玩家字典,每个玩家都有一个卡片集合。

 var Players = ["Scott": [Card](), "Bob": [Card](), "John": [Card]()]

为了有效地从我已经洗牌的牌组发牌,我计划循环遍历玩家字典两次,每次发一张牌,就像现场发生的那样。

是否可以简单地将 Card 类型附加到 Card 集合中?我的尝试似乎没有奏效。 dCard 类型的洗牌 Deck(Collection)。

Players["Scott"].append(d.deal())

编辑1

通过为每个播放器使用结构,我添加了这个

struct Player {
   let name : String
   var cards : [Card]
}
var Players = [Player]()
Players.append(Player(name:"Scott"))

我是否必须在初始化时给玩家他们的“牌”,或者我可以稍后发牌吗?由于上面的代码会产生错误。

Players.append(Player(name:"Scott", cards: [Card]()))

以上是否正确?

最佳答案

直接回答:

如果玩家可以拥有一组纸牌,那么 Player 应该是一个结构体,并且该结构体应该包含一组纸牌作为属性。我建议在这里完全不要使用字典。

编辑后:

你走在正确的轨道上。

如果您自己为您的结构创建一个初始化器,您就不必在初始化时给玩家他们的卡片:

struct Player {
    let name : String
    var cards : [Card] = []

    init(name: String) {
        self.name = name
    }
}

这样做会取消成员初始化器的自动生成,只有你的初始化器可用。

但是如果你想保留自动成员初始化器,你可以在初始化时传递一个空的卡片数组:

struct Player {
    let name : String
    var cards : [Card]
}

let joe = Player(name: "Joe", cards: [])

评论之后:

如果您将所有玩家都放在一个数组中,则可以使用带有闭包谓词的 indexOf 来获取特定玩家,例如:

struct Player {
    let name : String
    var cards : [Card] = []

    init(name: String) {
        self.name = name
    }

    func fold() {
        print("\(name) just folded")
    }
}

var players = [Player]()
players.append(Player(name: "Joe"))
players.append(Player(name: "Jane"))
players.append(Player(name: "Jack"))
players.append(Player(name: "Janice"))

if let janeIndex = players.indexOf({ $0.name == "Jane" }) {
    players[janeIndex].fold()
}

假设您希望所有玩家弃牌,只有一个玩家弃牌,您可以使用 filter:

let notJack = players.filter { $0.name != "Jack" }
notJack.forEach { $0.fold() }

关于ios - .append() 到自定义结构的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38588634/

相关文章:

ios - 使用 UITableView 和 CollectionView 进行布局

swift - 方法无法标记为@objc,因为参数 3 的类型无法在 Objective-C 中表示 - @objc func 中无法识别错误类型?

ios - SciChart iOS 折线图上的日期

ios - 如何获取 UICollectionViewCell 的矩形?

ios - 如何将数据关联到 UITableView 中的特定行

arrays - 如何就地洗牌

c - "realloc(): invalid next size"多次成功运行后

swift - 新项目错误 - 产品目标变红

ios - 无法使用 SWIFT 2 从附件标签 rss xml 中提取 url 值

PHP:修剪对象中的每个元素,如果为空,则设置为 N/A