What I mean is that, if you have other code in the same file as your struct definition, you could do something like this:var a2 = Array2D(nbRows: 1, nbCol: 1, repeatedValue: true) a2.nCol = 5 a2.nRows = 5Because the private keyword only restricts access from code in other source files. Now, the nCol and nRows properties and the colCount and rowCount functions do not indicate the actual size of the array, and the row and column functions will crash.If you have the struct definition in it's own source file with nothing else, it won't be a problem.As I mentioned, to make sure even code in the same source file can't mess things up, you could use read-only computed properties and get rid of the colCount and rowCount functions.struct Array2D<T: Equatable> { var matrix : [[T]] var nRows: Int { return self.matrix.count } var nCol : Int { if self.matrix.count > 0 { return self.matrix[0].count } else { return 0 } } Also, your row and column functions should check to make sure that the index v