2017-01-09 4 views
0

私は独自の属性とメソッドを持つクラスChessSquareを持っています。私は別のクラスChessBoardを持っています。これは辞書型の属性を持っています。チェス盤クラスのメソッドのSwift 3の別のクラスオブジェクトの辞書メンバーにクラスオブジェクトを割り当てることができません

class ChessBoard { 
    var squares: [ Int : ChessSquare ] = [:] 
    ..... 

つchessSquareオブジェクトを作成し、以下のようにチェス盤オブジェクトに割り当てます。 Swift3前

self.squares[squareName] = chessSquare 

このコードは正常に動作しました。 Swift3にアップグレードした後、割り当てが停止しました。

ブレークポイントを使用すると、chessSquareオブジェクトが期待どおりに構築されていることがわかります。 squareName変数には期待値があります。 chessBoardオブジェクトである「自己」は適切な初期値を持ちます。しかし、上記のコードでは、辞書の割り当ては何のエラーもなくスキップされます。

これはSwift3に関連するものですか?私は閲覧し、私の場合に特定の解決策を得ることができませんでした。


明確にするためにコードを追加しています。

class ChessSquare { 
    let squareColor: UIColor 
    let squareShade: Int 
    let squareName: Int 
    let squareSize: CGSize 
    let minXY: CGPoint 
    let maxXY: CGPoint 
    let squareOrigin: CGPoint 
    var hasPiece = false 
    weak var chessPiece: ChessPiece? 
    let squareSprite: SKSpriteNode 
    let squareType: SquareType 
    //more data members 

    init(squareColor: UIColor, squareShade: Int, squareName: Int, squareSize: CGSize, minXY: CGPoint, maxXY: CGPoint, squareOrigin: CGPoint, squareSprite: SKSpriteNode, squareType: SquareType) { 
     self.squareColor = squareColor 
     self.squareShade = squareShade 
     self.squareName = squareName 
     self.squareSize = squareSize 
     self.minXY = minXY 
     self.maxXY = maxXY 
     self.squareOrigin = squareOrigin 
     self.squareSprite = squareSprite 
     self.squareType = squareType 
    } 

    //more methods 

} 

class ChessBoard { 
    var squares: [ Int : ChessSquare ] = [:] 
    var byteBoard: [UInt8] = [UInt8](repeating: UInt8(0), count: 66) 
    var byteBoardHashVal: Int = 0 
    // [ byteBoardHashVal : ((byteBoard, evalnVal), repCnt) ] 
    var byteBoards: [Int : (([UInt8],Double?), Int)] = [:] 
    var TT: [Int : Double] = [:] 
    var TTReuseCount = 0 
    var whitePawnlessFileByte: UInt8 = 255 
    var blackPawnlessFileByte: UInt8 = 255 

    var maxXY: CGPoint = CGPoint() 
    var minXY: CGPoint = CGPoint() 

    var oldTouchedSquare: ChessSquare? 

    init() { 
     squares = [:] 
     byteBoard = [UInt8](repeating: UInt8(0), count: 66) 
     byteBoardHashVal = 0 
     byteBoards = [:] 
     TT = [:] 
     TTReuseCount = 0 
     whitePawnlessFileByte = 255 
     blackPawnlessFileByte = 255 

    } 

    func drawFlippedChessBoard(_ view: SKView, scene: GameScene) { 
     .... 
     .... 
     for row in 0..<8 { 
      for col in 0..<8 { 
       let squareName = row * 8 + col 

       .... 

       let chessSquare = ChessSquare(squareColor: currentColor, squareShade: squareShade, squareName: squareName, squareSize: squareSize, minXY: minXY, maxXY: maxXY, squareOrigin: squareOrigin, squareSprite: squareSprite, squareType: squareType) 

       .... 

       self.squares[squareName] = chessSquare 

       .... 
      } 
      .... 
     } 
     .... 
    } 

    //more methods 

} 
+0

なぜあなたは辞書を使用していますか?整数キーを持つ辞書は配列です... – Paulw11

+0

最初は私のボード表現は{11,12、... 18,21,21 ... 28 ..... 88}でした。私はこれらの数字で配列をインデックスできませんでした。だから私は辞書を使いました。最近、私はその表現を{0、1、2 .... 63}に変更しました。私は今、Arrayを使用できるはずです。それを指摘してくれてありがとう。 – ArtBajji

答えて

1

squareNameが文字列か整数かがわかりにくいです。それは文字列のように聞こえる、私はchessSquareIndexまたはsquareIndexという名前を付けることをお勧めします。私はsquareNameがintであり、ここでの結果であるならば、それは正しく動作することを確認するために、小規模なテストを行った上で、あなたのコメントに基づいて

class ChessSquare { } 

class ChessBoard { 
    var squares: [ Int : ChessSquare ] = [:] 

    func getChessSquare(at squareIndex: Int) { 
     let chessSquare = ChessSquare() 
     return squares[squareIndex] = chessSquare 
    } 
} 

が、これもいることがわかりスウィフト3で正常に動作するようです閉鎖を避けていない限り、selfに電話する必要はありません。

関連する問題