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

时间:2016-07-26 11:26:47

标签: ios arrays swift struct

我有一个用于创建,随机播放和处理扑克牌的自定义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]()]

为了有效地处理我已经洗过的牌组,我计划两次遍历玩家的字典并每次处理一张牌,就像现场一样。

是否可以简单地将卡片类型附加到卡片收藏中?我的尝试似乎没有奏效。 d类型的混乱甲板集合)。

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

EDIT1

对于每个玩家使用Structs我添加了这个

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

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

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

以上是否正确?

1 个答案:

答案 0 :(得分:1)

直接回答:

如果玩家拥有一系列牌,那么玩家应该是一个结构,这个结构应该包含一系列牌作为属性。我建议不要在这里使用词典。

编辑后:

你走在正确的轨道上。

如果你自己为你的结构创建了一个初始化程序,那么你不必 在初始化时给玩家他们的牌:

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() }

Use the below method for converting UTC date format to Local date Format
private void converUTCTOLocal(){
        String dateInput = "02/04/2016 12:22:11";
    //sdfIn is current date format
        SimpleDateFormat sdfIn  = new SimpleDateFormat("dd/mm/yyyy hh:mm:ss");
    //sdfOut is required date format
        SimpleDateFormat sdfOut  = new SimpleDateFormat("dd/mm/yyyy hh:mm:ss");
        sdfOut.setTimeZone(Calendar.getInstance().getTimeZone());
        TimeZone utcZone = TimeZone.getTimeZone("UTC");
        sdfIn.setTimeZone(utcZone);
        try {
            Date dateIn = sdfIn.parse(dateInput);
            String dateOut = sdfOut.format(dateIn);
            Log.i("dateOut",""+dateOut);


        }catch (ParseException e1){
            e1.printStackTrace();
        }catch (Exception e){
            e.printStackTrace();`enter code here`
        }

    }