我讀過幾篇關於訪問結構成員內部結構成員的類似帖子,並嘗試了一些他們的解決方案。如果您覺得不然,請在投票前發表評論。Swift根據另一個結構變量設置結構變量var(試過初始化)
我有結構網格需要以便確定許多細胞在網格如何都活着訪問結構單元{風險狀態的構件的延伸。我的嘗試被註釋掉了。爲什麼我不能訪問cell.state
extension Grid {
var numLiving: Int {
return positions(rows: self.rows, cols: self.cols).reduce(0) { total, position in
// let myState = Cell.state()
// return myState.isAlive ? (total + 1) : (total)
// error: instance member 'state' cannot be used on type 'Cell'
}
}
}
細胞絕對有與狀態的枚舉的狀態成員:
struct Cell {
var position: (Int,Int)
var state: CellState
init(_ position: (Int,Int), _ state: CellState) {
self.position = (0,0)
self.state = .empty
}
}
enum CellState {
case alive
case empty
case born
case died
var isAlive: Bool {
switch self {
case .alive, .born: return true
case .empty, .died: return false
}
}
}
struct Grid {
var rows: Int = 10
var cols: Int = 10
var cells: [[Cell]] = [[Cell]]()
init(_ rows: Int,
_ cols: Int,
cellInitializer: (Int, Int) -> CellState = { _,_ in .empty }) {
self.rows
self.cols
self.cells = [[Cell]](repeatElement([Cell](repeatElement(Cell((0,0), .empty), count: cols)),count: rows))
positions(rows: rows, cols: cols).forEach { row, col in
cells[row][col].position = (row, col)
cells[row][col].state = .empty
}
謝謝!所以這基本上是在說「給我這個牢房,無論這個位置是什麼,並檢查這個狀態」? – HashRocketSyntax
'positions'調用返回一個位置元組數組。通過每個位置減少循環,保持總計。 'position'是一個'(row,col)'元組,所以'position.0'是行,'position.1'是col。使用這些,你可以從'cells'的那個位置得到單元格,然後檢查它的狀態以決定是否需要添加到總數中。 – vacawama