안녕하세요 저는 체스 게임을 만들려고 노력하고 있습니다. 저는 현재 주어진 두 개의 체스 사각형이 사각형에 체스 피스를 바꿔주는 함수를 만들려고합니다. 각 사각형은 선택적인 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
}
}
포지션을 쉽게 바꿀 수 있도록 양쪽 체스 피클을 모두 복사해야합니까? 그렇지 않으면 주석 처리 된 선은 두 개의 체스 조각 객체가 메모리의 같은 위치를 가리키고있는 것처럼 보입니다.
사각형과 체스 피스는 모두 클래스이므로 참조로 전달됩니다. 변수를 저장하는 변수도 변경됩니다. – victorydub