2

GKGameModel内部状態を s の配列にa格納する と、 s からs の配列にマップCardする辞書があります。GameplayKit では、この内部状態を にコピーする必要があります。bIntCardsetGameModel:

次のコードは、配列を単にコピーし、ディクショナリを「ディープ コピー」するためのものです。FWIK Cards 自体は変更されないため、これで十分です。

var a: [Card]
var b: [Int: [Card]]

func setGameModel(gameModel: GKGameModel) {
    let otherGameModel = gameModel as! GameModel
    a = otherGameModel.a
    b = otherGameModel.b.map { (i: Int, cards: [Card]) in (i, cards) }
}

ただし、これにより、「ディープ コピー」を試行する行で次の構文エラーが発生します。

タイプ '[(Int, [Card])]' の値をタイプ '[Int, [Card]]' の値に割り当てることはできません。

私は何を間違っていますか?

4

2 に答える 2

2

あなたの場合:

b = otherGameModel.b

十分なものです。

はどちらも値型だArrayからDictionaryです。そのため、別の変数に割り当てられると、ディープコピーされます。

var bOrig: [Int: [Int]] = [1: [1,2,3], 2:[2,3,4]]
var bCopy = bOrig

bCopy[1]![2] = 30

bOrig[1]![2] // -> 3
bCopy[1]![2] // -> 30
于 2015-08-20T13:24:24.480 に答える
1

エラー メッセージは、型の不一致があることを示しています。

変数bは as として宣言されてDictionary<Int,[Card]>いますが、map 関数はArrayof を返しますtuplets (Int, [Card])

于 2015-08-20T11:31:08.167 に答える