我是Swift的新手,我正在尝试创建一个自定义对象数组。我做了一些研究,主要出现在网上的是:
Array(repeating: Array(repeating: [Object](), count: y), count: x)
或类似但我还没有能够让他们为我工作。 (因为不同的快速版本等而弃用。)现在我有
class ChessPiece {
// class definition...
}
class ChessBoard {
var board: [[ChessPiece]] = []
init() {
board = [[ChessPiece(),ChessPiece(),ChessPiece()],
[ChessPiece(),ChessPiece(),ChessPiece()],
[ChessPiece(),ChessPiece(),ChessPiece()]]
}
}
但如果我有100行或列怎么办?难道没有更有效和直接的方法来创建一个包含x行和y列的矩阵吗?
答案 0 :(得分:1)
你提到的功能很好Array(repeating:count:)
。
这适用于我的操场:
struct ChessPiece {}
func makeChessPlate(dimension: Int) -> [[ChessPiece]] {
return Array(repeating: Array(repeating: ChessPiece(), count: dimension), count: dimension)
}
print(makeChessPlate(dimension: 2)) // Result: [[ChessPiece, ChessPiece],[ChessPiece, ChessPiece]]
编辑:请注意,我的示例只能 ,因为我使用了结构而不是类。与类相反,结构体是按值复制的,然后会生成一组唯一对象。
答案 1 :(得分:1)
我只是使用普通的for-in循环
class ChessPiece {
// class definition...
}
class ChessBoard {
var board: [[ChessPiece]] = []
init(row: Int, column: Int) {
for _ in 1...row {
var innerArray: [ChessPiece] = []
for _ in 1...column {
innerArray.append(ChessPiece())
}
board.append(innerArray)
}
}
}
let chessBoard = ChessBoard(row: 8, column: 8)
答案 2 :(得分:-3)
您可以使用此循环创建多维数组。
class ChessPiece{
}
var numColumns = 27
var numRows = 52
var array = [[ChessPiece]]()
for column in 0...numColumns {
array.append(Array(repeating: ChessPiece(), count:numRows))
}
这将创建一个ChessPieces数组数组。