こんにちは私はチェスゲームを作ろうとしています、そして、私は現在、与えられた2つのチェスの四角形、四角形のチェスのスワップの機能を構築しようとしています。各四角形は、オプションのChessPieceオブジェクトを持つクラスです。私の現在の問題は、あるチェスの小節を他のチェスの小枝のプロパティに移動すると、両方のチェスの小節が、同じ四角形のプロパティを参照しているため、同じオブジェクトを指すことになります。 どのように私はオブジェクトのプロパティをスワップしますかSwift
private func swapSquares(square1: Square, square2: Square) {
if square1.chessPiece == nil && square2.chessPiece == nil {
return
}
var square1ChessPiece: ChessPiece?
var square2ChessPiece: ChessPiece?
if let square1piece = square1.chessPiece {
square1ChessPiece = square1piece
}
if let square2piece = square2.chessPiece {
square2ChessPiece = square2piece
}
if let square1piece = square1ChessPiece {
square1piece.frame = square2.frame
square1piece.square = square2
square2.chessPiece = square1piece // after this, square1ChessPiece and Square2Chess become the same
}
if let square2piece = square2ChessPiece {
square2piece.frame = square1.frame
square2piece.square = square1
square1.chessPiece = square2piece
}
}
は私が簡単にポジションを入れ替えることができますので、両方のchesspiecesの深いコピーを作成行く必要がありますか?そうでなければ、コメントされた行は、両方のchesspieceオブジェクトがメモリ内の同じ場所を指し示すように見えます。
問題は正方形とチェスの両方がクラスであり、参照によって渡されるということです。それを格納している変数も同様に変更されます。 – victorydub